npm i zustand
1.函数参数必须返回一个对象 对象内部编写状态数据和方法
2.set是用来修改数据的专门方法必须调用它来修改数据
import { useEffect } from "react";
import { create } from "zustand";
// 1. 创建store
const goodsStore = create((set) => ({
count: 1,
inc: () => set((state) => ({ count: state.count + 1 })),
channelList: [],
// 异步方法
fetchChannelList: async () => {
const res = await fetch(URL);
const jsonData = await res.json();
set({ channelList: jsonData.data.channels });
},
}));
// 2. 绑定store到组件
function Counter() {
const { count, inc, channelList, fetchChannelList } = goodsStore();
useEffect(() => {
fetchChannelList()
}, [fetchChannelList])
return (
<div>
<button onClick={inc}>{count}</button>
<ul>
{channelList.map((item) => {
return <li key={item.id}>{item.name}</li>;
})}
</ul>
</div>
);
}
export default Counter;
3.切片模式--模块化
import { useEffect } from "react";
import { create } from "zustand";
// 1. 创建store
const goodsStore = (set) => ({
count: 1,
inc: () => set((state) => ({ count: state.count + 1 })),
});
const channelListStore = (set) => ({
channelList: [],
// 异步方法
fetchChannelList: async () => {
const res = await fetch(URL);
const jsonData = await res.json();
set({ channelList: jsonData.data.channels });
},
});
const useStore = create((...a) => ({
...goodsStore(...a),
...channelListStore(...a),
}));
// 2. 绑定store到组件
function Counter() {
const { count, inc, channelList, fetchChannelList } = useStore();
useEffect(() => {
fetchChannelList();
}, [fetchChannelList]);
return (
<div>
<button onClick={inc}>{count}</button>
<ul>
{channelList.map((item) => {
return <li>{item}</li>;
})}
</ul>
</div>
);
}
export default Counter;