Скажем, у меня есть объект с двумя полями MobX @observable
:
class Address {
@observable country
@observable city
}
Когда одно из них изменяется, я хочу вызвать функцию, которая меняет другое.Например, когда country
изменяется, я могу захотеть очистить city
, если его значение недопустимо для новой страны.
Есть ли подходящий шаблон для этого?
Iне думаю, что я могу использовать autorun
.Так как я пытаюсь изменить наблюдаемое значение, и у меня включено enforceActions
, мне нужно изменить его в action
.Но это выдает ошибку «Автозапуск не принимает действия, поскольку действия не отслеживаются»:
autorun(action(() => {
if (this.country === 'US' && this.city === 'Paris') this.city = '';
}));
Я знаю, что могу добавить функцию @computed
, которая возвращает либо city
, либо новое значение.Но тогда исходное значение city
все еще там, и будет возвращено, когда country
вернется обратно.Я не хочу этого;Я хочу навсегда изменить city
.
@computed get realCity() {
if (this.country === 'US' && this.city === 'Paris') return '';
return this.city;
}