我试图了解如何在Mobx中使用observable数组。
我很难弄明白为什么:
if (!String.IsNullOrEmpty(rawxml) && rawxml.Contains("<rss"))//RSS Feeds
{
//Create XML and remove unneeded xml nodes
var xdoc = XDocument.Parse(rawxml);
foreach (var item in xdoc.XPathSelectElements("//item/??some/xpath/here/to/get/unwanted/children"))
{
item.RemoveNodes();
item.RemoveAll();
}
//Feed in the cleaned up xml into SyndicationFeed
using (XmlReader r = xdoc.CreateReader())
{
SyndicationFeed rssfeed = SyndicationFeed.Load(r);
//Do stuff
}
}
}
写道:
let entities = observable([]);
entities[0] = "foo";
autorun(() =>{
console.log(entities);
});
而不是经典数组?
答案 0 :(得分:29)
弄清楚!
如文档中所述
请记住,Array.isArray(observable([]))将产生false,因此每当您需要将一个可观察数组传递给外部库时,最好先创建一个浅拷贝,然后再将其传递给其他使用array.slice()或array.peek(),库或内置函数(无论如何都是很好的做法)。所以Array.isArray(observable([])。slice())将产生true。
文档示例向我们展示了一个todos.filter()
可能导致混淆,因为todos
看起来像一个真正的JS数组。但事实并非如此。
因此,对于我的工作,我只需要console.log(entities.slice())
,它将显示一个真正的JS数组。
答案 1 :(得分:0)
记录mobx的另一种方法是使用toJS
方法
import { toJS } from 'mobx';
class Store {
@observable
fruits = ['Apple', 'Banana'];
constructor() {
console.log('this.views :', toJS(this.data));
}
}
export default new Store();
希望获得帮助。 Source