微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有没有一种方法可以将动态JSON保存到Mobx状态树中?

如何解决有没有一种方法可以将动态JSON保存到Mobx状态树中?

我以前使用过Redux,并且将动态JSON保存到存储中非常容易。我在想,如何在Mobx-State-Tree中做同样的事情,而无需实际定义模型结构

.model({
    data:types.array(...)
)}

我正在尝试,但再次需要在其中定义JSON数组结构。

解决方法

使用mobx状态树的整个想法是在应用程序中定义隐式数据类型。

但是如果由于某种原因您想保存JSON但不进行定义,那就是使用JSON.stringify({...})将其转换为字符串

该模型实际上是一个字符串

.model({
    data:types.string
)}

然后您可以使用操作将JSON保存到其中

.actions((self) => ({
   saveJSON(jsonData){
        self.data = JSON.stringify(jsonData)        
      }
})

然后,您可以通过使用视图的JSON.parse()调用store.getJson属性来在任何地方使用此JSON

   views((self) => ({
      get getJson(){
         return JSON.parse(self.data)
      }
    })
,

我需要这样做是因为我收到了一个定义明确的类型的对象,但该类型包含一个 config 字段,它可以是任何 json。

我通过定义在 MST 中做到了:

export const AnyJsonValue = types.union(
    types.string,types.number,types.integer,types.Date,types.boolean,types.map(types.late(() => JsonValue)),types.array(types.late(() => JsonValue)),types.undefined,types.null
);

然后像这样使用它:

export const MyObject = types.model("MyObject",{
        uuid: types.identifier,name: types.string,config: types.maybeNull(types.map(AnyJsonValue)),...
});

如果您有一些限制,您仍然可以设置它们。 例如,如果您希望 config 为 null 或带有任何 json 嵌套的 dict(因此 config 不能是文字或数组,但可以是包含它们的 dict),您可以使用类型:t.maybeNull(t.map(JsonValue))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。