@triggery/mobx
Читай observable-состояние MobX из условия Triggery, не задействуя dependency tracking MobX на хост-компоненте. Никаких autorun, reaction, observer — просто обычная функция read, вызываемая в момент срабатывания.
Установка
Заголовок раздела «Установка»pnpm add @triggery/core @triggery/react @triggery/mobx mobx npm install @triggery/core @triggery/react @triggery/mobx mobx yarn add @triggery/core @triggery/react @triggery/mobx mobx bun add @triggery/core @triggery/react @triggery/mobx mobx Peer-зависимости: react >= 18.0.0, mobx ^6.
Что внутри
Заголовок раздела «Что внутри»| Экспорт | Назначение |
|---|---|
useMobxCondition(trigger, name, read) | Регистрирует условие на основе обычной read-функции над MobX-состоянием. |
Быстрый пример
Заголовок раздела «Быстрый пример»import { makeAutoObservable } from 'mobx';
import { createTrigger } from '@triggery/core';
import { useMobxCondition } from '@triggery/mobx';
class SettingsStore {
sound = true;
notifications = true;
constructor() { makeAutoObservable(this); }
}
const settings = new SettingsStore();
const messageTrigger = createTrigger<{
events: { 'new-message': { text: string } };
conditions: { settings: { sound: boolean; notifications: boolean } };
actions: { showToast: { body: string } };
}>({
id: 'message-received',
events: ['new-message'],
required: ['settings'],
handler({ event, conditions, actions }) {
if (!conditions.settings.notifications) return;
actions.showToast?.({ body: event.payload.text });
},
});
function SettingsBridge() {
useMobxCondition(messageTrigger, 'settings', () => ({
sound: settings.sound,
notifications: settings.notifications,
}));
return null;
}Как это работает
Заголовок раздела «Как это работает»Функция read вызывается только при срабатывании триггера. Dependency tracking MobX из хука не задействуется, поэтому:
- Никаких ререндеров компонентов из-за этого хука.
- Никакой подписчик не остаётся в живых между срабатываниями.
Если компоненты тоже должны рендерить observable — заворачивай их в observer (или используй useObserver из mobx-react-lite) — оба пути ортогональны.
useMobxCondition<S, K>(
trigger: Trigger<S>,
name: K,
read: () => ConditionMap<S>[K],
): voidread — обычная функция. Используй .get() для боксов, точечный доступ к observable.object и т.д. — ровно так же, как читаешь MobX-состояние в любом другом месте.
Связанные пакеты
Заголовок раздела «Связанные пакеты» @triggery/core Экспортирует Trigger.
@triggery/react useMobxCondition — это React-хук.
@triggery/zustand Альтернативный адаптер для Zustand-сторов.
@triggery/redux Альтернативный адаптер для Redux-сторов.
@triggery/signals Адаптер для состояния в форме сигналов (Preact, alien-signals).