Javascript 我为什么要使用';用户导出';在实现全局作用域状态时是否在反应中?

Javascript 我为什么要使用';用户导出';在实现全局作用域状态时是否在反应中?,javascript,node.js,reactjs,Javascript,Node.js,Reactjs,所以,在编写了一个完整的web应用程序之后,我决定尝试一下react的“上下文”,因为react的道具钻得如此之深,这是你以前从未见过的。我阅读了react文档,并决定将我的状态(这些状态非常需要帮助,因为它们深深扎根于一个又一个组件中)放在一个单独的文件中: -创建一个“context.js”文件 -在里面我会有:[注意我有两个状态在里面] import { createContext } from 'react' export const context = createContext();

所以,在编写了一个完整的web应用程序之后,我决定尝试一下react的“上下文”,因为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>
       )
}

现在我的问题是这种方法有多有效。在一些博客中,我读到了关于使用上下文和钩子的内容,我读到的每个博客都使用了“useReduce”钩子。有人能解释一下为什么使用“useReduce”,这就是它解决了什么问题以及如何解决的吗。非常感谢。

这根本没有效率:任何时候调用
setState1()
都会导致
的重新呈现,从而导致整个应用程序的重新呈现,这大概是被包装在
中的


考虑使用上下文检查我的全局状态管理库:)

我觉得这个问题在这里非常相关:(最终,
useReducer
useState
在性能方面应该同样有效?不过我在这里不是专家)。 另外,
useReducer
更适合处理复杂状态,这通常发生在您开始使用上下文或Redux时

如果你想在你的州里有这样一个对象

user: {
  options: { ... },
  settings: { ... }
}
您确实应该使用
useReducer
(尤其是在
选项的更改依赖于知道
设置是什么的情况下),并通过调度处理复杂的逻辑,而不是千方百计地使用
useState
。在一天结束时,他们做的事情与“处理状态”差不多,如果你想了解更多细微差别,最好的方法是阅读文档:


再说一次,我不是专家,但我已经做了不少尝试来研究“React中的性能”,从我收集的信息来看,由于状态更改而导致的重新加载很少是问题所在。通常,子组件中会有依赖于对道具执行昂贵计算的内容,正确的解决方案不是“防止重新渲染”,而是执行类似“向上移动昂贵计算”的操作,因此每次渲染只需执行一次,而不是每次渲染都执行一次
n个子级

哦,是的,我怎么会错过呢。那么,你会建议我怎么做我想做的事情呢?即,使用上下文管理多个状态。或者,除了为每个状态创建单独的上下文之外,没有其他选择了。请使用my lib:D或深入研究其代码,看看它是如何工作的。它还有一个上下文提供程序,它保存“GlobalState”对象。您需要的任何数量的数据都存储在该对象的不同路径上,并且它使用了一个复杂的系统,允许单独的组件更新和监视不同的全局状态路径。但作为最终用户,您只需在components
const[value,setValue]=useGlobalState('some.path','initial_value')
<中执行操作,就像本地状态一样,只要更改值,它只会触发监视该状态路径或任何父路径的组件的重新呈现。
user: {
  options: { ... },
  settings: { ... }
}