React Native 如何从外部API在MST中创建types.array-总是返回代理而不是对象

8xiog9wr  于 2023-01-14  发布在  React
关注(0)|答案(2)|浏览(94)

我正在从外部API获取数据,并希望将其作为数组存储在MST存储中。但结果总是代理,而不是我想要的对象。
这是API的结果:

(4) [Object, Object, Object, Object]
0:Object
id:1
name: "Foobar"
created_at: "2019-04-27 09:09:29"
updated_at:null
deleted_at:null
__proto__:Object
.........

这是我的店:

const TypesModel = types.model({
  name: types.maybe(types.string),
  created_at: types.maybe(types.string)
});

export const TransactionTypeStore = types
  .model("TransactionTypeStore", {
    transaction_types: types.optional(types.array(TypesModel), [])
  })
  .actions(self => ({
    getTypes: flow(function*(token) {
      try {
        const res = yield typesApi
          .headers({ Authorization: `Bearer ${token}` })
          .get()
          .json();

        console.log("result", res);

        self.transaction_types = res;

        // res.map(data => {
        //   self.transaction_types.push(data);
        // });
      } catch (err) {
        console.log(err);
      }
    })
  }));

这是我的MST商店的控制台日志:

transaction_types:Proxy
[[Handler]]:Object
[[Target]]:Array(4)
0:ObjectNode
1:ObjectNode
2:ObjectNode
3:ObjectNode
$treenode:ObjectNode
length:4
toJSON:function toJSON()
Symbol(mobx administration):ObservableArrayAdministration
__proto__:Array(0)
[[IsRevoked]]:false
.........

有人知道如何处理这类问题吗?

qlckcl4x

qlckcl4x1#

它类似于TypeScript,只是您使用的是Mobx.MODEL
假设我们要创建一个ToDo列表,该数组的id为:编号、姓名:字符串,isDone:布尔值。
首先使用Mobx.model定义此接口,如下所示:

const singleToDoItem = types.model({
    id: types.number,
    name: types.string,
    isDone: types.boolean
})

然后我们创建一个Actual Store,将ARRAY作为一个类型(你也可以使用. optional),然后将singleToDoItem放入types. array(singleToDoItem)中,看起来像这样:

const myStore = types.model({
    list: types.array(singleToDoItem)
})

最终代码如下所示:

const singleToDoItem = types.model({
    id: types.number,
    name: types.string,
    isDone: types.boolean })

const myStore = types.model({
    toDoList: types.array(singleToDoItem) })

我在我的YouTube频道上做了a video关于如何做到这一点。

t98cgbkg

t98cgbkg2#

你的res对象看起来是什么样的,它应该是一个{ name, created_at }对象的数组-没有更多也没有更少,是吗?而且transaction_types永远不只是一个数组-types.array是一个复杂的MST类型,它有一些数组方法,但它不是数组。它是an observable array,你应该相应地对待它。
也检查这个视频教程由Michel Weststrate自己:Use observable objects, arrays, and maps to store state in MobX,以便更好地理解这个概念(* 创建一个帐户,它是免费的 *)。

相关问题