Hummbitv1.x

Что такое Hummbit

Hummbit

hummbit — иммутабельный менеджер состояния с двумя публичными entrypoint:

  • hummbit (framework-agnostic API + типизированный initStore)
  • hummbit/react (React API + useSelector, без Provider)

Пакет поддерживает два режима работы:

  • Store instance mode через initStore(...) (рекомендуется для нового кода)
  • Global singleton mode через getState / setState / mergeState

Как это работает на практике:

  • Store instance mode (initStore)

    • Вы создаете отдельный экземпляр стора (const userStore = initStore(...)), у которого свой initialState, свои actions, свои selectors, своя подписка и своя версия state.
    • Такие сторы изолированы друг от друга: обновления в userStore никак не меняют cartStore.
    • В React-версии (hummbit/react) экземпляр дополнительно получает store.useSelector, который подписывает компонент только на этот конкретный store instance.
    • Это лучший режим для модульной архитектуры: каждый домен (auth, cart, profile) имеет собственный typed store.
  • Global singleton mode (top-level API)

    • Во всем приложении существует один общий store по умолчанию (singleton), к которому обращаются getState, setState, mergeState, selector и global useSelector из hummbit/react.
    • Типизацию этого режима обычно делают через declare module "hummbit" { interface RootState { ... } }.
    • Подходит, когда нужен один глобальный state без явного создания store-инстансов.
    • Важно вызывать configureGlobalStore(...) на старте приложения, до первых обновлений состояния.

Когда что выбирать:

  • Выбирайте Store instance mode, если важны изоляция, модульность, тестируемость и явные границы доменов.
  • Выбирайте Global singleton mode, если приложение небольшое и вам удобнее один общий state-контейнер.

Краткий checklist

  • Нужен изолированный доменный store? Используйте initStore.
  • Нужен React без Provider? Используйте hummbit/react + store.useSelector.
  • Нужен один глобальный store? Используйте augmentation + top-level API.
  • Нужны DevTools/middleware? Конфигурируйте в bootstrap.
Автор: Alexey TolkachevLinkedIn