web-dev-qa-db-ja.com

Mobx:監視可能な配列が正しく表示されない

Mobxで監視可能な配列を使用する方法を理解しようとしています。

私はこれがなぜこれであるかを理解するのに苦労しています:

let entities = observable([]);
entities[0] = "foo";
autorun(() =>{
  console.log(entities);
});

書き込み:

[$mobx: Object]
0: (...)
1: (...)
2: (...)
3: (...)
4: (...)
5: (...)
6: (...)
7: (...)
8: (...)
9: (...)
10: (...)
11: (...)
12: (...)
13: (...)
14: (...)
15: (...)
16: (...)
17: (...)
...
999: (...)

古典的な配列の代わりに?

11
dagatsoin

見つけ出す!

ドキュメントに記載されているように

Array.isArray(observable([]))はfalseを生成することに注意してください。したがって、監視可能な配列を外部ライブラリに渡す必要がある場合は常に、他のライブラリに渡すかビルドする前に浅いコピーを作成することをお勧めします。 -array.slice()またはarray.peek()を使用した関数内(とにかく良い習慣です)。したがって、Array.isArray(observable([])。slice())はtrueを返します。

ドキュメントの例は、todosが実際のJS配列のように見えるため、混乱を招く可能性のあるtodos.filter()を示しています。そうではありません。

したがって、私の例を機能させるには、実際のJS配列を表示するconsole.log(entities.slice())を実行する必要があります。

32
dagatsoin