useReducer/useState更新太慢

useReducer/useState updates too slow

我正在尝试删除我们应用程序的 redux。为此,我尝试使用新的 React Hooks API.

我写了自己的钩子,它是 useReducer 函数的扩展,每次更新时都保持状态。

export default (reducer, persistKey, onRehydrate) => {
  let initialState = rehydrate(persistKey)
  if (onRehydrate && typeof onRehydrate === 'function') {
    initialState = onRehydrate(initialState)
  }
  const [state, setState] = useState(initialState)

  function dispatch (action) {
    const nextState = reducer(state, action)
    setState(nextState)
    persist(nextState, persistKey)
  }

  return [state, dispatch]
}

我的问题是我有这样的用例,我的调度函数在很短的时间间隔内被调用了几次,它们相互中继。就像一个数组,它总是在每次调度时添加一个新项目。为此,我合并了最后一个状态和新状态。因为它是在状态更新之前被调用的,所以最后的状态不是上次调用的新状态。因此我的状态只保存最后一次调度。 有什么方法可以解决这个问题(除了更改更新的调用方式,因为它们来自第三方组件)

提前致谢。

我无法验证这是否有效,但我怀疑它会。您可以将 dispatch 中的 setState 调用更改为回调形式,这样您就可以在将现有状态传递到 reducer 之前引用它。

export default (reducer, persistKey, onRehydrate) => {
  let initialState = rehydrate(persistKey)
  if (onRehydrate && typeof onRehydrate === 'function') {
    initialState = onRehydrate(initialState)
  }
  const [state, setState] = useState(initialState)

  function dispatch (action) {
    setState(prevState => { // Use callback form here.
      const nextState = reducer(prevState, action)
      persist(nextState, persistKey)
      return nextState
    });
  }

  return [state, dispatch]
}