Javascript Mobx:可观察数组未正确显示

Javascript Mobx:可观察数组未正确显示,javascript,arrays,mobx,Javascript,Arrays,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: (

我试图理解如何在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: (...)
而不是一个经典的数组?

弄清楚

如文件所述

请记住,Array.isArray(observable([])将产生false,因此,每当需要将可观察数组传递给外部库时,最好先创建一个浅拷贝,然后再使用Array.slice()或Array.peek()将其传递给其他库或内置函数(这是一个很好的做法)。因此Array.isArray(observable([]).slice()将生成true

doc示例向我们展示了一个
todos.filter()
,这可能会导致混淆,因为
todos
看起来像一个真正的JS数组。但事实并非如此


因此,对于我的示例,我只需要
console.log(entities.slice())
,它将显示一个真实的JS数组。

另一种记录mobx可观察的方法是使用
toJS
方法

import { toJS } from 'mobx';

class Store {
  @observable
  fruits = ['Apple', 'Banana'];

  constructor() {
    console.log('this.views :', toJS(this.data));
  }
}

export default new Store();

希望这有帮助

我在使用
时遇到了这个问题(不是一个外部库,只是一个标准的html字段)。控制台给了我一个警告,初始选择没有出现。更改为
this.props.val.sice()
修复了它。这是一种丑陋的黑客行为,希望有更好的解决方案,以某种方式将可观察数组定义为纯数组。同样的问题…我得到了以下错误:无法读取未定义的属性“slice”。我认为这是不推荐的。这就是为什么我们需要使用slice()链接“Source”提供404-Not found我想文档已经更改,源url已经更新