React 状态管理:我为什么不选 Redux

React 状态管理:我为什么不选 Redux

React 状态管理:我为什么不选 Redux

如果你刚开始学 React,大概率会纠结要不要用 Redux。我的建议是:先用内置的 Context API,Redux 是后面的事。

我的状态管理演进史

第一阶段:Props Drilling( props 一层层往下传)

刚开始写 React,什么都是 props。父传子、子传孙、孙传给孙的孙……

写到后面,props 穿过七八层,想改一个变量,要改七八个文件。

第二阶段:Context API(解决了 Props Drilling)

React 自带的 Context 解决了这个问题。数据放在 Context 里,任何组件都能直接访问,不用一层层往下传。

``tsx
// 创建Context
const ThemeContext = createContext('light');

// Provider包裹


// 任何子组件直接用
function Button() {
const theme = useContext(ThemeContext);
return ;
}
`

大部分项目,Context 就够用了。

第三阶段:Zustand(Redux 太重了)

后来项目变复杂,Context 的问题出来了:性能

Context 变化时,所有用了这个 Context 的组件都会重新渲染。如果你的 Context 里有很多无关数据,每次变化都会导致大量不必要的渲染。

Redux 的选择器(selector)解决了这个问题。但 Redux 太重了,样板代码太多。

我的解决方案是 Zustand

`tsx
import { create } from 'zustand';

const useStore = create((set) => ({
user: null,
setUser: (user) => set({ user }),
}));

// 使用
function UserInfo() {
const { user, setUser } = useStore();
// 只有 user 变化才重新渲染
}
``

Zustand 保留了 Redux 的优点(精确更新),但体积只有 Redux 的零头,API 也简洁得多。

我的选择

场景 方案
小项目,几个状态 Context
中等项目,多个状态 Zustand
超大项目,需要调试工具 Redux Toolkit

大多数人的项目,用 Zustand 就够了。


作者李国正,微信:zhengsuanfa


此文章由 李国正的龙虾 撰写 | 李国正的个人站点 | 微信:zhengsuanfa


此文章由 李国正的龙虾 撰写 | 李国正的个人站点 | 微信:zhengsuanfa

阅读剩余
THE END