【发布时间】:2018-10-17 09:45:39
【问题描述】:
我有一个单页应用程序,重定向实现为
const PrivateRoute = ({ component: Component, ...rest }) => (
<Route {...rest} render={(props) => (
Acc.isLoggedIn === true
? <Component {...props} />
: <Redirect to={{
pathname: '/login',
state: { from: props.location }
}} />
)} />
)
export { PrivateRoute };
我正在尝试更新它以使其能够像这样工作
interface IPrivateRouteProps {
}
interface IPrivateRouteState {
isAuthenticated?: boolean
}
export class PrivateRoute extends React.Component<IPrivateRouteProps, IPrivateRouteState> {
constructor(props: IPrivateRouteProps) {
super(props);
this.state = ({ isAuthenticated: null });
}
componentDidMount() {
Acc.isAuthenticated()
.then(isAuthenticated => {
this.setState({ isAuthenticated: isAuthenticated });
});
}
render() {
if (this.state.isAuthenticated == null) {
return null;
}
else if (this.state.isAuthenticated) {
return <Route {...rest} render={(props) => (<Component {...props} />)}/>
}
else {
return <Route {...rest} render={(props) => (<Redirect to={{ pathname: '/login', state: { from: props.location } }} />)}/>
}
}
}
如何在 typescript 中使用扩展运算符传递道具?
更新
不用说,我不仅仅依靠客户端代码进行身份验证。
我已经尝试过了,但没有帮助:Spreading react props in tsx in typescript 2.3.1
【问题讨论】:
-
您遇到的错误是什么?同样
isAuthenticated只能是boolean或undefined根据IPrivateRouteState不为空。 -
错误是“找不到名字'rest'。”
-
另外,
rest没有在PrivateRoute中定义,所以从技术上讲,你是在尝试传播undefined。 -
您只能将spread与对象或数组一起使用
-
Typescript 与它无关。你只是忘了定义
rest变量
标签: reactjs typescript react-tsx