1.安装
npm install zustand # or yarn add zustand
2.项目结构

3.上代码
useStore.js
import { create } from 'zustand'
export const useStore = create((set, get) => ({
name: 'zrs',
age: 22,
img: '',
product: {
productName: '笔记本',
price: 2000
},
reset: () => set(() => ({}), true),
setName: (name) => set(() => ({ name })),
setAge: () => set(() => ({ age: 99 })),
fetch: () => {
fetch('https://api.uomg.com/api/rand.img1?sort=美女&format=json')
.then((res) => res.json())
.then((res) => {
console.log('res', res)
set(() => ({ img: res.imgurl }))
})
},
changeProductName: (productName) => (set({ product: { productName, price: get().product.price } }))
}))
app.jsx
import { Button, Divider } from 'antd'
import { useEffect } from 'react'
import { useStore } from './store/userStore'
import Child1 from './components/child1'
import Child2 from './components/child2'
export default function App() {
const userName = useStore((state) => state.name)
const userAge = useStore((state) => state.age)
const setName = useStore((state) => state.setName)
const setAge = useStore((state) => state.setAge)
const fetch = useStore((state) => state.fetch)
useEffect(() => {
}, [])
return (
<>
{userName}----{userAge}
<hr />
<Button type="primary" onClick={setAge}>
set age
</Button>
<Button
type="primary"
onClick={() => {
setName('新的名字') // 在这里传入的参数,然后设置给state
}}
>
set name
</Button>
<Button type="primary" onClick={fetch}>
fetch
</Button>
<hr />
<Child1 />
<Divider>商品</Divider>
<Child2 />
</>
)
}
child1.jsx
import { useStore as store } from '../store/userStore'
import { Button } from 'antd'
export default function Child1() {
const reset = store((state) => state.reset)
const { name, age } = store((state) => ({ name: state.name, age: state.age }))
return (
<div>
<Button
onClick={() => {
reset()
}}
>
reset
</Button>
<hr />
{name}----------------{age}
</div>
)
}
child2.jsx
import { useStore } from '../store/userStore'
import { Button } from 'antd'
export default function Child2() {
const { product } = useStore((state) => ({ product: state.product }))
const changeProductName = useStore((state) => state.changeProductName)
return (
<div>
{product.productName}------{product.price}
<Button
onClick={() => {
changeProductName('新的产品名字')
}}
>
设置商品名字
</Button>
</div>
)
}
4.中文官方网址
ZUSTAND 中文文档 | ZUSTAND (awesomedevin.github.io)