Я занимаюсь разработкой приложения react-native
с expo
, redux
и react-native-sync-localstorage
для сохранения состояния приложения в локальном хранилище в следующий раз, когда приложение запустится, в качестве токена для связи с текущим API-интерфейсом.пользователь и т. д.
Я буду тестировать начальный запуск, загружать состояние из локального хранилища и переходить к redux
:
export default store = createStore(rootReducer, LocalStorage.find('state'))
Если state.profile.token
отсутствует в приложениибудет запущен на экране входа в систему, если присутствует state.profile.token
, то приложение будет запускаться с главного экрана.
Если перед загрузкой состояния я вставляю жестко закодированное состояние в localStorage с токеном, пользовательской информациейприложение запускается из основного, и это правильное поведение:
LocalStorage.insert('state', {
profile: { current: { id: 1, type: 'staff', name_type: 'Personal' },
token: 'Mx2msERuY6342enWEtD2',
user: { id: 1, name: 'Ezequiel', surname: 'Depetris',gender: 'male' }
}
}
export default store = createStore(rootReducer, initialState)
Но когда я запускаю exp build:android
на консоли, а затем запускаю приложение на телефоне Android, состояние никогда не загружается и всегдаприложение запускается с экрана входа в систему, даже если пользователь в данный момент загружен.
Файл, который решает, какой экран будет отображаться следующим образом:
...
const initialRoute = () => {
if (store.getState().profile.token != null)
return 'Main'
else
return 'LogIn'
}
const Router = createSwitchNavigator({
LogIn: {
screen: LogInScreen
},
Main: {
screen: MainNavigator
}
}, {
initialRouteName: initialRoute(),
headerMode: 'none',
mode: 'modal'
})
...
У меня есть разрешение на запись и чтение в хранилище Android, установленное в манифесте Android, и я помещаю запрос на LogInScreen
как:
...
async componentWillMount() {
await requestStoragePermission()
}
...
requestStoragePermission.js
:
...
export async function requestStoragePermission() {
const { status } = await Permissions.askAsync(Permissions.CAMERA_ROLL);
}