Reactjs 执行React和x27的减速器功能;用户的用户钩子必须是纯的吗?

Reactjs 执行React和x27的减速器功能;用户的用户钩子必须是纯的吗?,reactjs,Reactjs,有些模糊: 接受类型为(state,action)=>newState的减速机,并返回与分派方法成对的当前状态。(如果您熟悉Redux,您已经知道它是如何工作的。) 然后说 减速机保持纯净是非常重要的。在减速器内,您应该永远不要做的事情: 改变其论点 执行API调用和路由转换等副作用 调用非纯函数,例如Date.now()或Math.random() 但我没有使用Redux。React文档似乎没有说减速机必须是纯的。只是有一个模糊的说法,知道Redux的人“已经知道它是如何工作的” 那么,用

有些模糊:

接受类型为
(state,action)=>newState
的减速机,并返回与
分派
方法成对的当前状态。(如果您熟悉Redux,您已经知道它是如何工作的。)

然后说

减速机保持纯净是非常重要的。在减速器内,您应该永远不要做的事情:

  • 改变其论点
  • 执行API调用和路由转换等副作用
  • 调用非纯函数,例如
    Date.now()
    Math.random()
但我没有使用Redux。React文档似乎没有说减速机必须是纯的。只是有一个模糊的说法,知道Redux的人“已经知道它是如何工作的”

那么,用于
useReducer
的reducer函数需要纯吗?
如果需要,为什么?如果不是,他们应该是纯洁的吗?如果是,为什么


我想象一个动作将状态更新为“加载”,同时触发一个API调用,响应时会发送一个不同的动作,因此再次更新状态。

记住
useReducer
中的reducer是用于什么的:state。这是一种将一组状态分组到单个位置的方法,而不是使用10个
useState
hook。所以,在减速器中,你不应该产生副作用。副作用有一个位置:
useffect
hook

给出加载状态的示例,您只需执行以下操作:

useEffect(() => {
    dispatch({type: 'SET_LOADING', payload: true})

    // fetch your stuff

    dispatch({type: 'SET_LOADING', payload: false})
}, [/* your dependencies */])

React遵循功能范式,功能纯度是其中的一个重要部分。还原剂可能有副作用(毕竟它们只是功能)。缩减器不应该因为同样的原因而将所有代码放在一个组件中:每个函数/文件/组件都有特定的用途。减少是为了国家。

谢谢你的回答,但它没有向我解释“为什么”。