【问题标题】:problem with redux initial state using localStorage on react-native在 react-native 上使用 localStorage 的 redux 初始状态问题
【发布时间】:2019-02-20 18:48:34
【问题描述】:

我正在开发一个react-native 应用程序,使用exporeduxreact-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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2020-11-26
      • 1970-01-01
      • 2021-07-17
      • 2018-07-23
      • 2019-08-17
      • 2016-09-22
      • 2017-05-11
      • 2016-05-01
      相关资源
      最近更新 更多