У меня есть одностраничное приложение с перенаправлением, реализованным как
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 } }} />)}/>
}
}
}
Как я могу передать реквизит с помощью оператора распространения в машинописном тексте?
Обновить
Излишне говорить, что я не просто полагаюсь на клиентский код для аутентификации.
Я уже пробовал это, но это не помогло: Распространение реквизитов реакции в tsx в typescript 2.3.1
isAuthenticated
может быть толькоboolean
илиundefined
в соответствии сIPrivateRouteState
не нулевым. - person Jonathan Goodman   schedule 17.10.2018rest
не определено вPrivateRoute
, поэтому технически вы пытаетесь распространитьundefined
. - person Jonathan Goodman   schedule 17.10.2018rest
- person Nurbol Alpysbayev   schedule 17.10.2018