Приветствую, товарищи.
У меня есть определенный объект, назовем его 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)} /> // чем это
В общем, товарищи, поделитесь вашими бест парктисами и вашим мнением, как вы думаете, какой вариант будет наилучшим.