Zustand - одна из многих библиотек управления состояниями для React. На этой странице мы рассмотрим Zustand в сравнении с некоторыми из этих библиотек, включая Redux, Valtio, Jotai и Recoil.
У каждой библиотеки есть свои сильные и слабые стороны, и мы сравним ключевые различия и сходства между ними.
Концептуально Zustand и Redux довольно похожи, обе основаны на неизменяемой модели состояний. Однако Redux требует, чтобы ваше приложение было обернуто в контекстные провайдеры, а Zustand - нет.
import{createSlice,configureStore,}from'@reduxjs/toolkit';constcountSlice=createSlice({name:'count',initialState:{value:0},reducers:{incremented:(state,qty:number)=>{// Redux Toolkit does not mutate the state, it uses the Immer library// behind scenes, allowing us to have something called "draft state".state.value+=qty;},decremented:(state,qty:number)=>{state.value-=qty;},},});constcountStore=configureStore({reducer:countSlice.reducer,});
Когда дело доходит до оптимизации рендеринга в вашем приложении, между Zustand и Redux нет существенных различий в подходах. В обеих библиотеках рекомендуется вручную применять оптимизацию рендеринга с помощью селекторов.
import{useSelector}from'react-redux';importtype{TypedUseSelectorHook}from'react-redux';import{createSlice,configureStore,}from'@reduxjs/toolkit';constcountSlice=createSlice({name:'count',initialState:{value:0},reducers:{incremented:(state,qty:number)=>{// Redux Toolkit does not mutate the state, it uses the Immer library// behind scenes, allowing us to have something called "draft state".state.value+=qty;},decremented:(state,qty:number)=>{state.value-=qty;},},});constcountStore=configureStore({reducer:countSlice.reducer,});constuseAppSelector:TypedUseSelectorHook<typeofcountStore.getState>=useSelector;constuseAppDispatch:()=>typeofcountStore.dispatch=useDispatch;constComponent=()=>{constcount=useAppSelector((state)=>state.count.value);constdispatch=useAppDispatch();// ...};
Zustand и Valtio принципиально по-разному подходят к управлению состояниями. Zustand основан на неизменяемой модели состояний, а Valtio - на изменяемой модели состояний.
Еще одно различие между Zustand и Valtio заключается в том, что Valtio оптимизирует рендеринг через доступ к свойствам. Однако в Zustand рекомендуется вручную применять оптимизацию рендеринга с помощью селекторов.
Между Zustand и Jotai есть два основных различия. Во-первых, Zustand - это единое хранилище, в то время как Jotai состоит из примитивных атомов, которые можно компоновать друг с другом. Во-вторых, хранилище Zustand - это внешнее хранилище, что делает его более подходящим, когда требуется доступ за пределами React.
В Jotai оптимизация рендеринга достигается за счет зависимости от атомов. Однако в Zustand рекомендуется вручную применять оптимизацию рендеринга с помощью селекторов.
Разница между Zustand и Recoil аналогична разнице между Zustand и Jotai. Recoil зависит от ключей строк атомов вместо ссылочных идентичностей объектов атомов. Кроме того, Recoil необходимо обернуть ваше приложение в контекстный провайдер.
Как и в предыдущих сравнениях оптимизаций, Recoil оптимизирует рендеринг через зависимость от атомов. В то время как в случае с Zustand рекомендуется вручную применять оптимизацию рендеринга с помощью селекторов.