Actions
📖 1. Теория
Actions используются для модификации observable состояния в MobX.
Зачем нужны actions?
- Транзакции - все изменения группируются
- Оптимизация - reactions запускаются только один раз
- Безопасность - в strict mode обязательны
action vs runInAction
action - для методов класса:
class Store {
increment() {
this.count++;
}
}
runInAction - для встроенного кода:
runInAction(() => {
store.count++;
});
Главное правило
action работает только ДО первого await!
После await нужен runInAction или используйте flow.
💻 2. Практика
Попробуйте запустить код:
Actions - транзакции
class CounterStore {
count = 0;
name = '';
constructor() {
makeAutoObservable(this);
}
increment() {
this.count++;
this.name = `Count: ${this.count}`;
}
}
const store = new CounterStore();
let reactionCount = 0;
reaction(
() => ({count: store.count, name: store.name}),
() => {
reactionCount++;
console.log(`Reaction #${reactionCount}`);
}
);
console.log('=== БЕЗ action ===');
runInAction(() => {
store.count++;
});
runInAction(() => {
store.name = 'Test';
});
console.log('\n=== С action (группировка) ===');
store.increment();
console.log(`\nВсего срабатываний reaction: ${reactionCount}`);Обратите внимание: с action реакция сработает 1 раз вместо 2!
🎯 3. Мини-тест
Проверьте понимание:
Тест: Actions в MobX
1 / 5Что произойдет если изменить observable вне action в strict mode?
A.Всё будет работать нормально
B.Выбросится ошибка
C.Изменение игнорируется
D.Автоматически обернется в action
📊 Прогресс: 0 / 5 вопросов
🎴 4. Anki карточки
Готовые карточки для запоминания:
Карточки для Anki
8 карточек💡 Как импортировать в Anki:
- Нажмите "Скачать для Anki"
- В Anki: Файл → Импортировать
- Выберите скачанный .csv файл
- Тип: "Базовый (с обратной карточкой)"
- Разделитель полей: Запятая
- Импортировать!
📊 Результат обучения
После изучения этой статьи вы:
- ✅ Понимаете зачем нужны actions
- ✅ Знаете разницу между action и runInAction
- ✅ Умеете работать с async операциями
- ✅ Прошли тест и проверили знания
- ✅ Импортировали карточки в Anki для запоминания
Следующий шаг: повторяйте карточки в Anki каждый день! 🧠