intermediate
Actions
Группируйте намеренные мутации, чтобы изменения observable оставались явными, прослеживаемыми и батчированными.
Actions группируют намеренные изменения состояния. Они батчат уведомления и видны в трассах MobX. `makeAutoObservable` считает методы actions; для async после `await` используйте `runInAction`.
import { makeAutoObservable, runInAction } from 'mobx';
class UserStore {
user = null;
loading = false;
constructor() {
makeAutoObservable(this);
}
async load(id) {
this.loading = true;
const data = await fetchUser(id);
runInAction(() => {
this.user = data;
this.loading = false;
});
}
}
Без `runInAction` мутации после await могут оказаться вне action context — предупреждения в strict mode.
Компромисс: батчированные прослеживаемые мутации против дисциплины проводить все записи через actions.
На интервью: зачем async нужен runInAction; контраст с dispatch fulfilled actions в Redux.
Типовые ошибки: мутации в компонентах вместо методов store, забытый runInAction после fetch, actions с лишними побочными эффектами (лучше reactions).
Чеклист:
- Публичные методы меняют состояние store.
- runInAction после границ await.
- Actions сфокусированы на переходах состояния.
- Логируйте actions в dev для отладки.