Skip to content

События

Событие сообщает модели, что что-то произошло. Оно не хранит состояние и не решает, что делать дальше. Его задача — принести payload в граф и дать реакциям возможность отреагировать.

ts
const queryChanged = event<string>();
const submitted = event<void>();

Хорошее событие звучит как факт: queryChanged, submitted, messageReceived, routeOpened. Плохое событие часто звучит как техническая команда: setQuery, updateState, handleSubmit. Техническая команда привязывает модель к способу изменения. Факт оставляет модели свободу иметь несколько правил.

Изменение состояния

Событие само ничего не меняет. Состояние меняется в реакции.

ts
reaction({
  on: queryChanged,
  run(text) {
    query.value = text;
  },
});

На одно событие могут реагировать несколько правил. Например, submitted может запустить эффект поиска, сбросить ошибку и записать время последней отправки. Событие при этом остается маленьким и понятным.

Payload

Payload — данные события. Для queryChanged это новый текст. Для messageReceived это сообщение. Для submitted payload может быть не нужен, поэтому используется event<void>().

Не кладите в payload больше, чем нужно правилу. Если реакция может прочитать актуальное значение из стора, часто лучше прочитать его там, а не тащить через событие лишние данные.