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 для отладки.