@wonderingpeanut

Архитектура состояния: разделение на категории или на действия?

Приветствую, товарищи.

У меня есть определенный объект, назовем его HeaderState, который должен хранить состояние двух, ээ, вещей? объектов? элементов!

Элементы следующие: мобильное меню и диалог авторизации.

Оба этих элемента имеют схожее состояние: isOpen, open (экшен открывающий элемент) и close (экшен закрывающий элемент).

Как лучше организовать структуру этого состояния?

type NoArgsNoReturn = () => void;
// разделение на категории - "что это за объект"
type HeaderStateCategory = { isOpen: boolean; open: NoArgsNoReturn; close: NoArgsNoReturn }
const headerState = {
  navMenu: HeaderStateCategory,
  authDialog: HeaderStateCategory
}

// разделение на категории - "что этот объект делает"
const headerState = {
  isOpen: { navMenu: boolean, authDialog: boolean }
  open: { navMenu: NoArgsNoReturn, authDialog: NoArgsNoReturn }
  close: { navMenu: NoArgsNoReturn, authDialog: NoArgsNoReturn }
}


Можно, конечно, полиморфизировать функции, оставив одну функцию "setOpen", которая бы, например, принимала в качестве аргумента ключ состояния и его новое значение, но это загромоздит код. Или нет?

const { open } = useHeaderState();
...
<button onClick={open.navMenu} /> // это выглядит лучше
<button onClick={() => setOpen('navMenu', true)} /> // чем это


В общем, товарищи, поделитесь вашими бест парктисами и вашим мнением, как вы думаете, какой вариант будет наилучшим.
  • Вопрос задан
  • 118 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы