Пишем свою библиотеку управления состоянием
Джуд Хантер в своем блоге рассказал, как самостоятельно реализовать библиотеку для управления состоянием наподобие Zustand.
Одним из преимуществ библиотек для управления состоянием, в отличие от контекста, является то, что изменение стора не вызывает ререндера всего дерева компонентов. Реализовано это за счет использования селекторов в компоненте.
Чтобы показать свою работу, Джуд Хантер создал функцию создания стора и хук для подписки за изменениями. По аналогии с Zustand при создании стора передаются экшены для изменения стора. Код реализации хука селектора:
const useSelector = <STATE,>(
store: {state: STATE; subscribe: any},
selector: (state: STATE) => any,
) => {
const [selectedValue, setSelectedValue]
= useState(selector(store.state))
useEffect(() => {
return store.subscribe(newState => {
setSelectedValue(
selector(newState);
);
});
}, []);
return selectedValue;
}
judehunter.dev/blog/ho…-library