События
Событие сообщает модели, что что-то произошло. Оно не хранит состояние и не решает, что делать дальше. Его задача — принести payload в граф и дать реакциям возможность отреагировать.
const queryChanged = event<string>();
const submitted = event<void>();Хорошее событие звучит как факт: queryChanged, submitted, messageReceived, routeOpened. Плохое событие часто звучит как техническая команда: setQuery, updateState, handleSubmit. Техническая команда привязывает модель к способу изменения. Факт оставляет модели свободу иметь несколько правил.
Изменение состояния
Событие само ничего не меняет. Состояние меняется в реакции.
reaction({
on: queryChanged,
run(text) {
query.value = text;
},
});На одно событие могут реагировать несколько правил. Например, submitted может запустить эффект поиска, сбросить ошибку и записать время последней отправки. Событие при этом остается маленьким и понятным.
Payload
Payload — данные события. Для queryChanged это новый текст. Для messageReceived это сообщение. Для submitted payload может быть не нужен, поэтому используется event<void>().
Не кладите в payload больше, чем нужно правилу. Если реакция может прочитать актуальное значение из стора, часто лучше прочитать его там, а не тащить через событие лишние данные.