我正在从外部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
.........
有人知道如何处理这类问题吗?
2条答案
按热度按时间qlckcl4x1#
它类似于TypeScript,只是您使用的是Mobx.MODEL
假设我们要创建一个ToDo列表,该数组的id为:编号、姓名:字符串,isDone:布尔值。
首先使用Mobx.model定义此接口,如下所示:
然后我们创建一个Actual Store,将ARRAY作为一个类型(你也可以使用. optional),然后将singleToDoItem放入types. array(singleToDoItem)中,看起来像这样:
最终代码如下所示:
我在我的YouTube频道上做了a video关于如何做到这一点。
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,以便更好地理解这个概念(* 创建一个帐户,它是免费的 *)。