为什么在实现全局作用域状态时要在 react 中使用 'useReduce'?



因此,在用react编写了一个完整的web应用程序后,我决定试试react的上下文。我阅读了react文档,并决定将我的状态(它们非常需要帮助,因为它们深深植根于一个又一个组件中(放在一个单独的文件中:

-创建一个"context.js"文件

-里面我会有:[注意,我里面有两个状态]

import { createContext } from 'react'
export const context = createContext();
export default function ContextProvider (props) {
const [state1, setState1] = useState();
const [state2, setState2] = useState();
return (
<context.provider value={[state1, setState1, state2, setState2]}>
props.children
</context.provider>
)
}
  • 现在我所要做的就是将这个组件导入到我想使这些状态可见的地方,使用如下的析构函数:
//inside a functional component
...
const [state1, setState1] = useContext(context); //assuming I only need state1 in this component
...

现在我的问题是这种方法的效率有多高。在我读到的一些博客中,我读到了关于使用上下文挂钩的内容,我读过的每一个博客都使用了"useReduce"挂钩。有人能解释一下为什么使用"useReduce",即它解决了什么问题以及如何解决。我们将不胜感激。

我觉得这个问题在这里非常相关:没有Redux的快速变化状态(归根结底,useReduceruseState在性能方面应该同样高效?不过我不是这里的专家(。此外,useReducer更适合处理复杂状态,这通常发生在您开始使用Contexts或Redux时。

如果你想在你的状态中有这样的对象

user: {
options: { ... },
settings: { ... }
}

你真的应该使用useReducer(尤其是如果你在options中的更改依赖于知道settings是什么的情况下(,并通过调度来处理复杂的逻辑,而不是跳过重重关卡,试图让它与useState一起工作。在一天结束时,他们做了几乎相同的事情;"处理状态";,如果您想了解更多关于细微差别的信息,最好的方法是阅读文档:https://reactjs.org/docs/hooks-reference.html#usereducer.

再说一次,我不是专家,但我已经尝试过研究";React"中的性能;从我所收集到的情况来看,由于状态变化而重新发布很少是问题。通常情况下,子组件中会有依赖于对道具执行昂贵计算的东西,而正确的解决方案不是";防止重新应答";而是做一些类似于";将昂贵的计算向上移动";因此它只需要每次渲染发生一次,而不是每次渲染CCD_。

最新更新