mobx在对象深处失去属性

时间:2019-01-07 00:34:46

标签: react-native mobx

对于这个可怕的问题,我们事先表示歉意。我希望该领域的专家会知道我做错了什么白痴,如果您需要更多信息,请询问!

我需要使用mobx存储一个有点复杂的对象。

<input class="className" name="randomValue" value="randomValue2" type="hidden">

坐标看起来

const match = html.match(/<input\s*class="className"\s*name="(.+?)"\s*value="(.+?)"/m)
match[1] // randomValue
match[2] // randomValue2

和LatLng

const cheerio = require('cheerio');
const html = `<div class="RiP" style="text-align: left;"><div class="clr"></div><input name="extraMP" value="999" type="hidden"><div class="txta dropError">Slide to activate</div><div class="bgSlider"><div class="Slider ui-draggable"></div></div><div class="clr"></div><input class="myClass" name="randomValue" value="randomValue2" type="hidden"></div>`

const $ = cheerio.load(html);

$('.myClass').val(); // randomValue2
$('.myClass').attr('name'); // randomValue

我的商店中有

export default class Field {
    @observable public key: string;
    @observable public fieldCoordinates: Coords;
    @obser... more and more properties.

,在export default class Coords { @observable public id: string; @observable public coordinates: Array<LatLng>; } 方法中,我使用

export default class LatLng {
    @observable public latitude: number;
    @observable public longitude: number;
}

但是,当我尝试使用@observable public fields: Array<Field> = new Array<Field>(); 对象布置地图时,会出现错误消息

  

更新由AIRMapPolygon管理的视图的属性“坐标”时出错

我使用这种方法(在商店中)获取数据

Save

但是,当我检查即将进入商店的 store.save("fields", toJS(this.fields)); 数组时,它已经从LatLng数组中删除了。 (点列表在一个数组中有9个东西,但是数据不见了(我打开了第一个元素,它只包含coordinates而不是数据。)

https://i.imgur.com/GQtkiGu.png

我想我做错了什么,或者使用了错误的类型或简单的方法……您能引导我朝正确的方向前进吗?

1 个答案:

答案 0 :(得分:0)

我意识到这种类型的问题在这里不那么容易解决...

但是如果您是将来遇到类似问题的人,那么我已经通过从坐标数组和对象中删除@observable来“修复”它。

显然,这暂停了这些对象的mobx状态管理,但这对我的情况很好,现在对我有用。

更多新闻: 如果事实上有一个新的要求意味着我确实需要这些东西是可观察的。

我现在有这行用于数组

public readonly coordinates = observable<LatLng>([]);

并且我已经解决了以前的问题,我现在认为这与使用setState()有关,而我还没有完成向mobx的迁移,这是在打破我的页面和期望。

不要混淆不同的状态管理思想!