如何在React Native中使用异步数据(AsyncStorage)初始化MobX存储

sandre89

我们创建了一个简单的MobX存储来保存对象。每次更改fooObject时,此MobX存储也会与AsyncStorage同步:

import { observable } from 'mobx';

class FooStore {
  @observable fooObject = {};

  setFooObject(newFooObject) {
    this.fooObject = newFooObject;
    this.syncWithAsyncStorage();
  }

  syncWithAsyncStorage() {
    AsyncStorage.setItem('fooObject', JSON.stringify(this.fooObject));
  }

然后,该mobx存储将被应用程序中的各个屏幕占用。

如您所见,我们使用RNAsyncStorage来存储的当前状态,这是LocalStorage的一种,但用于本机应用程序fooObject

问题是:当应用程序关闭时,我们会松开FooStore状态,因此我们想检索对AsyncStorage进行的最后一次“保存”(已保存)。

问题在于AsyncStorage是(正如其名称所示)一个ASYNC函数,我们不能等待FooStore构造函数中的promise解析。

基于解析的AsyncStorage返回值,如何完成此MobX存储的初始状态初始化?

我们考虑过在FooStore中编写这样的初始化方法(异步方法):

async initializeFromAsyncStorage() {
  this.fooObject = await JSON.parse(await AsyncStorage.getItem('fooObject'));
}

然后在我们的根App.js中在应用初始化时调用此方法。

但是我不确定这是否会带来意想不到的副作用,以及这是否是惯用的mobx / react-native。

戴维·海灵

是的,我将创建一个初始化方法。如果实例依赖于初始数据,则可以在实例化之后立即调用它:

const fooStore = new FooStore()
fooStore.initializeFromAsyncStorage()
export default fooStore

Thill不能保证在构建应用程序时会加载初始数据,但是由于该数据是可选的可观察的数据,因此如果/当数据可用时,您的应用程序将对此做出反应。

请记住,如果尚未设置,AsyncStorage.getItem它将解决null,因此您可能需要这样做:

async initializeFromAsyncStorage() {
  const result = await AsyncStorage.getItem('fooObject')
  if (result !== null) {
    this.fooObject = JSON.parse(result)
  }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在 React Native 中初始化 AsyncStorage 变量?

如何在React Native中使用AsyncStorage multiGet检索数据

如何在React Native中使用异步存储更改Route.Js中的初始屏幕

如何使用本地存储中的数据初始化存储?

如何在React Native中使用AsyncStorage正确获取Item?

如何在Redux中使用React Native AsyncStorage?

react-native如何在this.state {} <closed>中使用AsyncStorage获取数据

如何在 Apollo 客户端的初始化中使用来自 React 的全局数据?

如何在MobX中使用React Native ListView?

如何在组件安装后聚焦 TextInput(使用聚焦 TextInput 初始化)-React Native

如何在React中使用钩子预先初始化状态?

如何在Cordova中使用Redux正确初始化React应用-未调用mapStateToProps

如何在启动时使用异步存储数据呈现React Native组件?

如何在Docker容器中使用架构初始化MySQL数据库?

如何在sqlalchemy中使用默认值初始化数据库?

如何在R中使用动态数据初始化bucket_list?

如何在 R 中使用日期列*初始化空数据框?

如何在swift3中使用数据初始化结构变量

如何在AsyncStorage React Native(Expo)中存储Facebook令牌

如何在Kotlin中使用值初始化数组?

如何在结构初始化中使用#define

如何在Turbolinks中使用HTML初始化Flickity

如何在 redux 形式中使用初始化

如何在Swift的延迟初始化中使用self

如何在属性初始化中使用__slots__?

如何在TensorFlow中使用He初始化

如何初始化React Native项目

React Native:如何在异步存储中存储对象

如何使用React Hook`useWindowSize`来初始化MobX Store中的窗口大小?