对于这个可怕的问题,我们事先表示歉意。我希望该领域的专家会知道我做错了什么白痴,如果您需要更多信息,请询问!
我需要使用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
而不是数据。)
我想我做错了什么,或者使用了错误的类型或简单的方法……您能引导我朝正确的方向前进吗?
答案 0 :(得分:0)
我意识到这种类型的问题在这里不那么容易解决...
但是如果您是将来遇到类似问题的人,那么我已经通过从坐标数组和对象中删除@observable
来“修复”它。
显然,这暂停了这些对象的mobx状态管理,但这对我的情况很好,现在对我有用。
更多新闻: 如果事实上有一个新的要求意味着我确实需要这些东西是可观察的。
我现在有这行用于数组
public readonly coordinates = observable<LatLng>([]);
并且我已经解决了以前的问题,我现在认为这与使用setState()
有关,而我还没有完成向mobx的迁移,这是在打破我的页面和期望。
不要混淆不同的状态管理思想!