• 简体中文
  • 在 React 18 之前的版本中,在 React 事件处理器之外调用 action

    由于在事件处理器之外调用 setState 时 React 会同步处理,在事件处理器之外更新状态会强制 React 同步更新组件。因此,存在遇到僵尸 child 效应(zombie-child effect)的风险。 要解决这个问题,需要像下面这样用 unstable_batchedUpdates 包裹 action:

    import { unstable_batchedUpdates } from 'react-dom' // or 'react-native'
    
    const useFishStore = create((set) => ({
      fishes: 0,
      increaseFishes: () => set((prev) => ({ fishes: prev.fishes + 1 })),
    }))
    
    const nonReactCallback = () => {
      unstable_batchedUpdates(() => {
        useFishStore.getState().increaseFishes()
      })
    }

    更多细节:https://github.com/pmndrs/zustand/issues/302