Во-первых, существует множество способов решения этой проблемы.В связи с этим я попытаюсь объяснить вам, почему то, что у вас сейчас есть, не работает.
Причина, по которой это происходит, заключается в том, что когда вы присваиваете auth.isLoggedIn
своему состоянию isLoggedIn
, выприсваивая значение один раз, как копию.Это не ссылка, которая сохраняется.
В дополнение к этому, помните, что состояние React обычно обновляется только с setState()
, и оно никогда не вызывается здесь, поэтому ваше состояние не будет обновляться.
Способ, которым я бы подошел к этой проблеме, не добавляя такие элементы, как Redux, что само по себе излишне для этой проблемы, состоит в том, чтобы изучить создание компонента более высокого порядка аутентификации, который обрабатывает всю логику аутентификации и оборачивает все ваше приложение.Оттуда вы можете контролировать, следует ли отображать дочерние объекты или выполнять перенаправление.
Auth Component
componentDidMount() {
this._saveUserSettings(settings);
}
_saveUserSettings(settings) {
AsyncStorage.mergeItem('user', JSON.stringify(settings), () => {
AsyncStorage.getItem('user', (err, result) => {
isLoggedIn = result.isLoggedIn
api_key = result.api_key
});
this.setState({isLoggedIn: true});
});
}
render() {
const { isLoggedIn } = this.state;
return isLoggedIn ? this.props.children : null;
}
App.js
render() {
<AuthComponent>
//the rest of authenticated app goes here
</AuthComponent>
}
Вот очень быстрый, неполный пример.Но это должно показать вам, как вы можете выложить свою аутентификацию.Вы также захотите рассмотреть обработку ошибок и тому подобное.