在react-native上使用localStorage的redux初始状态的问题

时间:2019-02-20 18:48:34

标签: android react-native redux storage expo

我正在使用react-nativeexporedux开发一个react-native-sync-localstorage应用程序,以在下次应用程序启动时将应用程序状态存储在本地存储中,例如与api,当前用户等进行通信的令牌。

我将测试初始启动并从本地存储加载状态并传递给redux

export default store = createStore(rootReducer, LocalStorage.find('state'))

如果没有state.profile.token,则应用程序将在“登录”屏幕上启动;如果存在state.profile.token,则应用程序将从主屏幕启动。

如果在加载状态之前,我将硬编码状态插入到本地存储中,并带有令牌,应用程序从主目录开始的用户信息,那就是正确的行为:

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);
}

1 个答案:

答案 0 :(得分:0)

好的,我的解决方案是使用import { AsyncStorage } from "react-native",这是Expo提议的存储方式,我一直是mongo的扩展,之后我尝试了react-native-sync-localstorage,但我认为您仅被授权使用由expo提议的存储或其他可以与expo一起使用的存储