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()
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遵循功能范式,功能纯度是其中的一个重要部分。还原剂可能有副作用(毕竟它们只是功能)。缩减器不应该因为同样的原因而将所有代码放在一个组件中:每个函数/文件/组件都有特定的用途。减少是为了国家。谢谢你的回答,但它没有向我解释“为什么”。