Redux Toolkit, MobX, Context API — почему я отказался от всего этого
Redux Toolkit, MobX, Context API — почему я отказался от всего этого
От работы с Redux Toolkit руки уже сводило. Один и тот же паттерн, один и тот же код, меняются только имена. createAsyncThunk — напиши. Slice — напиши. ExtraReducer — напиши. Loading, success, error — снова напиши. Три API-вызова — три раза повторяй. Десять — десять. Это утомительно, чревато ошибками и, главное — не нужно.
С MobX немного иначе. Декораторы, observable'ы, reaction'ы. Много "магии". Работает, но понять, что происходит, сложно. Если где-то вылезет баг, искать его источник — часы работы. В большой команде MobX превращается в паттерн "trust me bro". Никто не может полностью контролировать происходящее.
Context API — совсем другой зверь. React сам предоставляет, "можешь использовать" говорит. Но попробуешь — ре-рендеры, оптимизация, всё в кучу. Selector'а нет, DevTools нет, debug — кошмар. К одному context'у привязано 10 компонентов — один изменился, греются все. Для маленького проекта сойдёт, для большого — головная боль.
Когда я увидел Zustand, подумал "вот оно что?". Одна функция, один store. И всё.
const useStore = create((set) => ({
user: null,
loading: false,
fetchUser: async (id) => {
set({ loading: true })
const user = await api.getUser(id)
set({ user, loading: false })
},
}))Никаких slice, thunk, extraReducer, provider, decorator. Обычная функция. Работает. Всё.
Selective re-render — есть. Даёшь selector — только при его изменении перерисовывается. Ничего лишнего.
const count = useStore((state) => state.count)Подключение к Redux DevTools есть. Работа с Immer тоже. Но ничего не обязательно.
1 KB. Вот и всё.