本文最后更新于:2025-11-25T14:35:08+08:00
zustand
优势:
- 极简的 api,较低的学习成本。只需通过
create 函数创建 store,直接定义状态和修改状态的方法,无需冗余模板。
- 更灵活的状态访问方式。支持选择性订阅(只监听需要的状态字段,减少不必要的重渲染,性能好)。
const count = useStore((state) => state.count)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
import {create} from 'zustand'
type CounterState = { count: number, add: () => void minus: () => void }
const useCounter = create<CounterState>((set) => ( { count: 0, add: () => set((state: any) => ({count: state.count + 1})), minus: () => set((state: any) => ({ count: state.count - 1 }))
} ))
export default useCounter
|
在页面上使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| import useCounter from '@/stores/useCounter'
function App() { const {count, add, minus} = useCounter() return ( <> <div> {count} </div> <button onClick={add}> add </button> <button onClick={minus}> minus </button> </> ) }
|
jotai
jotai 的核心是 atom,atom 是 jotai 中最基本的状态单位,可以是基本类型,也可以是对象类型。atom 之间可以有依赖关系,当一个 atom 的值发生变化时,所有依赖它的 atom 都会重新计算。
1 2 3 4
| import {atom} from 'jotai'
export const ageAtom = atom(0)
|
1 2 3 4
| import {atom} from 'jotai' export const nameAtom = atom('')
|
1 2 3 4 5 6 7
| import {atom} from 'jotai' import {ageAtom, nameAtom} from './Atom' export const infoAtom = atom((get) => ({ age: get(ageAtom), name: get(nameAtom) }))
|
在页面上使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| import {useAtomValue, useSetAtom} from 'jotai' import {infoAtom, ageAtom, nameAtom} from './Atom' function App() { const info = useAtomValue(infoAtom) const setAge = useSetAtom(ageAtom) const setName = useSetAtom(nameAtom) return ( <> <div> {info.age} </div> <div> {info.name} </div> <button onClick={() => setAge((age) => age + 1)}>+</button> <button onClick={() => setName((name) => name + 'hualu')}>add name</button> </> ) }
|
redux
这个看官网吧,用法配置复杂