【发布时间】:2021-07-20 09:33:44
【问题描述】:
我正在使用 zustand 进行状态管理,并且在检索一次数据后,当组件状态发生变化时,我试图只实时更新组件而不刷新页面。
这是我的商店
export const useStore = create((set) => ({
reservations: [],
getReservations: async () => {
const response = await axios.get(baseUrl);
set({ reservations: response.data });
},
setRev: (reservations) => {
set((state) => ({
...state,
reservations,
}));
},
addReservation: (reservation) => {
set((state) => ({ reservations: [...state.reservations, reservation] }));
},
removeReservation: (id) => {
set((state) => ({
reservations: state.reservations.filter(
(reservation) => id !== reservation._id
),
}));
},
}));
我已经尝试使用 useEffect 挂钩来检索数据,如下面的代码所示,我有另一个组件调用 addReservation 函数。下面的代码会导致无限调用useEffect,而不是仅在const reservations发生更改时才更新,当另一个组件调用addReservation函数时。
const getAllReservation = useStore((state) => state.getReservations);
const reservations = useStore((state) => state.reservations);
const reservationsRef = useRef(useStore.getState().reservations);
useEffect(() => {
getAllReservation()
useStore.subscribe(
(reservations) => (reservationsRef.current = reservations),
(state) => state.reservations
);
}, [reservations]);
我曾尝试拆分 useEffects,但需要再次刷新页面以显示更新的数据。 (想要的结果是没有刷新)
useEffect(() => {
getAllReservation()
}, [])
useEffect(() => {
useStore.subscribe(
(reservations) => (reservationsRef.current = reservations),
(state) => state.reservations
);
}, [reservations]);
我尝试将 [] 作为依赖数组作为 useEffect 挂钩中的第二个参数,但效果不佳。
感谢您的帮助。
【问题讨论】:
-
尝试为
getAllReservation()函数创建另一个useEffect(这样你就有 2 个)。 -
我试过了,还是不行,谢谢
标签: reactjs react-hooks zustand