Как создать types.array в MST из внешнего API - всегда возвращая прокси не объект - PullRequest
0 голосов
/ 31 мая 2019

Я извлекаю данные из внешнего 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);
      }
    })
  }));

А это console.log моего магазина 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
.........

Кто-нибудь знает, как бороться с такого рода проблемами?

1 Ответ

0 голосов
/ 12 июня 2019

Как выглядит ваш res объект, он должен быть массивом { name, created_at } объектов - не более, не менее? Также transaction_types никогда не будет простым массивом - types.array является сложным типом MST, у него есть несколько методов массива, но это не массив. Это наблюдаемый массив , и вы должны относиться к нему соответственно.

Также посмотрите это видео-руководство самого Мишеля Вестстрата: Используйте наблюдаемые объекты, массивы и карты для сохранения состояния в MobX , чтобы лучше понять концепцию ( создать учетную запись, это бесплатно ).

...