Попытка реализовать утилиты protectedRoute
для реактивного проекта, который в основном ищет JWT.Сначала он показывает индикатор загрузки, и если JWT отсутствует, он будет перенаправлен на /login
.
const LoadingComponent = () => (
<View>
<ActivityIndicator/>
</View>
)
class PrivateRoute extends React.Component {
state = {
loading: true,
jwt: null,
}
componentDidMount() {
storage.retrieve('JWT').then(jwt => this.setState({ loading: false, jwt }))
}
render() {
const { children } = this.props;
const { jwt, loading } = this.state;
if (loading) {
return <Route {...children} component={LoadingComponent}/>
}
if (!jwt) {
return <Redirect to="/signup" />;
}
return <Route {...children} />
}
}
export default PrivateRoute;
this.props.children
содержит всю необходимую информацию для создания маршрута в приложении.Первоначальная идея заключается в том, что в случае загрузки мы просто перезаписываем this.props.children.component
с пользовательским экраном загрузки.
НО решение, которое не выдает ошибку, (только предупреждение):
if (loading) {
return LoadingComponent
}
Я также попытался вручную вставить компонент как
component={() => <View>{...}</View>
render={() => ...}
Однако это также приводит к той же ошибке.Нарушение инварианта: недопустимый тип элемента: ожидается строка ..... но получено: undefined