摆脱 Redux:我喜欢的 3 种状态管理工具
让我们面对现实吧 - 多年来,Redux 一直是 React 状态管理的首选。虽然它非常适合处理大型应用程序中的复杂状态,但我经常发现自己淹没在样板代码中,并向新团队成员解释诸如 Reducer 和 Action 之类的概念。如果您正在寻找不同的方法,我有三个很棒的替代方案,它们可能会让您的下一个项目构建起来更加愉快。
现状:有意义的状态管理
我一尝试 Zustand(德语中“状态”的意思)就爱上了它。它就像是 Redux 节食了一次,然后又恢复了友好的性格。它有什么特别之处?它是围绕钩子构建的,这意味着你可以忘记我们多年来一直在编写的所有 Redux 样板。
以下是我真正欣赏 Zusand 的地方:
这是一个简单的例子,显示了 Zusand 有多干净:
import create from 'zustand'; const useStore = create((set) => ({ count: 0, increment: () => set((state) => ({ count: state.count + 1 })), })); function Counter() { const { count, increment } = useStore(); return (); }Count: {count}
Nanostores:微型状态管理器
说到微小,让我向你介绍 Nanostores。实际上,我在最近的项目 Happy Inbox 中就使用了它,它改变了游戏规则。Nanostores 鼓励你将事物分解成更小、更集中的部分,就像我们分解组件一样,而不是拥有一个庞大的状态存储(看着你,Redux)。
Nanostores 让我兴奋的地方在于:
实际操作如下:
import { atom, useStore } from 'nanostores'; const count = atom(0); function Counter() { const $count = useStore(count); return (); }Count: {$count}
反冲:Facebook 对现代国家管理的看法
Recoil 很有趣,因为它来自 Facebook 的 React 团队。他们重新审视了状态管理,并提出了一些在 React 生态系统中感觉很自然的东西。它引入了原子和选择器等概念,这些概念可能听起来很花哨,但一旦你开始使用它们,就会发现它们很有意义。
Recoil 的突出特点是:
下面让我们来感受一下 Recoil 的简洁性:
import { atom, useRecoilState } from 'recoil'; const countState = atom({ key: 'countState', default: 0, }); function Counter() { const [count, setCount] = useRecoilState(countState); return (); }Count: {count}
底线
瞧,Redux 不会消失,它仍然是许多项目的可靠选择。但这些替代方案解决了我们许多人在使用 Redux 时遇到的实际问题。如果你正在开始一个新项目,我会认真考虑尝试其中一种。Zustand 是我现在大多数项目的首选 - 它达到了简单和强大的最佳平衡点。如果包大小让你夜不能寐,Nanostores 可能是你的新朋友。如果你全力投入 React 并想要一些感觉像是专门为你的需求而构建的东西,Recoil 可能正是你在寻找的东西。
最好的部分是什么?它们都比 Redux 更容易向你的队友解释。这难道不值得单独考虑吗?