Как определить, что данные модели точно изменились с помощью mobx-state-tree?

Что я хочу сделать: клонировать содержимое узла для редактирования (как объяснено в Michhead.io по Michiel), после нажатия кнопки обновления скопировать обратно клон в исходную модель, только если изменения точно обнаружены, отправить обновление бэкэнду,

У меня есть что-то вроде этого: const nodeModel = { id: types.identifierNumber, name: types.string, description: types.string, }; экспорт const nodeState = types.model("Node", nodeMode);

Я мог бы добавить следующую функцию действия, чтобы определить, изменилось ли содержимое модели, и установить какой-либо грязный логический параметр в модели:

 afterCreate() {
     onSnapshot(self, newSnapshot => {self.dirty = true});
}

Но мне не нравится идея сделать грязное свойство членом модели, так как модель отправляется в бэкэнд, а грязная подпорка является частью презентации внешнего интерфейса. Как это можно сделать лучше? Может быть, пометить поля как игнорируемые при отправке снимка на сервер? Или используйте JSON.stringify() для исключения реквизита, как описано здесь для SO?

Еще одна вещь, с которой я боролся, и, безусловно, связанная с той же темой: как вызвать автоматическое обновление серверной части при копировании клона в исходное содержимое модели? У меня есть другая модель, которая использует вышеупомянутый nodeState:

const nodeTreeModel = {
    node: types.maybe(nodeState),

    children: types.optional(types.array(types.late(() => nodeTreeState)), []),
    isChildrenLoading: false,
    isChildrenLoaded: false,
};
export const nodeTreeState = types.model("NodeTree", nodeTreeModel);

Если я использую ловушку onSnapshot в nodeState для запуска обновления бэкэнда, он также вызывается, когда клон обновляется, так как кажется, что он также использует nodeState. Если я сделаю хук частью nodeTreeModel, он также получит информацию, если другие реквизиты изменились, и я хочу получать информацию только при изменении узла. Как это сделать?

0 ответов

Другие вопросы по тегам