Mobx теряет свойства глубоко в объекте - PullRequest
0 голосов
/ 07 января 2019

Заранее извиняюсь за этот ужасный вопрос. Я скорее надеюсь, что специалист в данной области поймет, что идиот делает, что я делаю неправильно, если вам нужна дополнительная информация, просто спросите!

У меня есть несколько сложный объект, который мне нужно сохранить с помощью mobx.

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

Coords выглядит как

export default class Coords {
    @observable public id: string;
    @observable public coordinates: Array<LatLng>;
}

и LatLng

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

В моем магазине у меня есть

@observable public fields: Array<Field> = new Array<Field>();

и в методе Save я использую

 store.save("fields", toJS(this.fields));

Однако, когда я пытаюсь использовать объект coordinates, чтобы выложить свою карту, я получаю ошибку

Ошибка при обновлении свойства 'координаты' вида, управляемого: AIRMapPolygon

Я получаю данные, используя этот метод (в магазине)

@computed public get DataSource(): Array<LatLng> {
    return this.field.fieldCoordinates.coordinates.slice();
}

Однако, когда я проверяю массив fields, когда он поступает в хранилище, он удаляется из массива LatLng. (список точек содержит 9 элементов в массиве, но данные исчезли (я открыл первый элемент, и в нем есть только proto, а не данные).

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

Я предполагаю, что я делаю что-то не так, или использую неправильные типы, или что-то простое ... Вы можете направить меня в правильном направлении?

1 Ответ

0 голосов
/ 07 января 2019

Я понимаю, что этот тип вопроса здесь не так уж и сложен ...

но если вы будущий человек с подобной проблемой, то я "исправил" ее, удалив @observable из координатных массивов и объектов.

Очевидно, что это останавливает управление состоянием mobx для этих объектов, но это хорошо для моего случая, и теперь оно работает для меня.

Другие новости: Если на самом деле новое требование означало, что мне нужно, чтобы оно соблюдалось.

У меня есть теперь эта строка для массива

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

и я исправил свою предыдущую проблему, которая, как мне кажется, была связана с использованием некоторого setState(), когда я не завершил переход на mobx, и именно это нарушало мою страницу и ожидания.

Не смешивайте разные идеи управления государством!

...