Skip to content

Счётчик

Задача

Собрать самый маленький полезный feature-пример на controller:

  • локальное состояние
  • одно или два actions
  • явный lifecycle контроллера

Решение

Использовать controller с одним atom, отдать его наружу как readonly state и держать все изменения внутри явных actions.

Код

ts
import { declareController, readonlyAtom } from '@nrgyjs/core';

export const CounterController = declareController(({ scope }) => {
  const count = scope.atom(0, { label: 'count' });

  return {
    state: {
      count: readonlyAtom(count),
    },
    increase: () => count.update((value) => value + 1),
    decrease: () => count.update((value) => value - 1),
  };
});

const controller = new CounterController();

controller.increase();
console.log(controller.state.count());

controller.destroy();

На что обратить внимание

  • во view лучше отдавать readonly state
  • все записи в state должны жить в именованных actions
  • controller надо уничтожать, когда feature завершается

Частые ошибки

  • отдавать во UI writable atoms напрямую
  • менять state из случайного внешнего кода
  • забывать вызывать destroy() в неглобальных сценариях