在 react-native 上使用 localStorage 的 redux 初始状态问题
problem with redux initial state using localStorage on react-native
我正在开发一个 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,带有令牌,应用程序从主应用程序启动的用户信息,这就是正确的行为:
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 phone 上 运行 应用程序时,状态永远不会加载并且应用程序始终从登录屏幕启动,即使用户当前已加载。
决定下一个屏幕渲染的文件:
...
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);
}
好的,我的解决方案是使用 import { AsyncStorage } from "react-native"
,这是 Expo 提出的存储方案,我一直在使用 mongo 的扩展,之后我尝试了 react-native-sync-localstorage
,但我认为你只有被授权使用 expo 建议的存储或可以与 expo
一起使用的其他一些存储
我正在开发一个 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,带有令牌,应用程序从主应用程序启动的用户信息,这就是正确的行为:
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 phone 上 运行 应用程序时,状态永远不会加载并且应用程序始终从登录屏幕启动,即使用户当前已加载。
决定下一个屏幕渲染的文件:
...
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);
}
好的,我的解决方案是使用 import { AsyncStorage } from "react-native"
,这是 Expo 提出的存储方案,我一直在使用 mongo 的扩展,之后我尝试了 react-native-sync-localstorage
,但我认为你只有被授权使用 expo 建议的存储或可以与 expo