【发布时间】:2019-02-20 18:48:34
【问题描述】:
我正在开发一个react-native 应用程序,使用expo、redux 和react-native-sync-localstorage 将应用程序状态存储在localstorage 上,以便下次应用程序启动时,作为与api 通信的令牌,当前用户等
我将测试初始启动并从本地存储加载状态并传递给redux:
export default store = createStore(rootReducer, LocalStorage.find('state'))
如果state.profile.token 不存在,则应用程序将在登录屏幕上启动,如果state.profile.token 存在,则应用程序将从主屏幕启动。
如果在加载状态之前,我将硬编码的状态插入到 localStorage,带有令牌、用户信息,应用程序从 main 启动,这是正确的行为:
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 manifest 上设置的 Android 存储的读写权限,我将请求放在LogInScreen 上:
...
async componentWillMount() {
await requestStoragePermission()
}
...
requestStoragePermission.js:
...
export async function requestStoragePermission() {
const { status } = await Permissions.askAsync(Permissions.CAMERA_ROLL);
}
【问题讨论】:
标签: android react-native redux storage expo