前言/描述
我正在尝试将 React 的新钩子功能用于我正在构建的电子商务网站,并且在处理我的购物车组件中的错误时遇到了问题。
我认为以我试图通过使用多个 Context 组件来保持我的全局状态module化这一事实作为讨论的开头是相关的。我有一个单独的上下文组件用于我提供的项目类型,还有一个单独的上下文组件用于一个人的购物车中的项目。
问题
我遇到的问题是,当我调度一个动作来将一个组件添加到我的购物车时,reducer 将运行两次,就好像我已经将项目添加到我的购物车两次一样。但仅当它最初被渲染时,或出于奇怪的原因,例如将显示设置为hidden
然后返回block
或更改z-index
以及可能的其他类似更改。
我知道这有点冗长,但这是一个相当挑剔的问题,所以我创建了两个代码笔来展示这个问题:
你会看到我已经包含了一个按钮来切换display
组件。这将有助于展示 css 与问题的相关性。
最后请在代码笔中监控控制台,这将显示所有按钮点击以及每个减速器的哪个部分已经运行。这些问题在完整示例中最为明显,但显示该问题的控制台语句也出现在最小示例中。
问题区
我已经指出问题与我使用useContext
钩子的状态来获取项目列表这一事实有关。一个函数被调用来为我的useReducer
钩子生成减速器,但只有在使用不同的钩子时才会出现,也就是我可以使用一个不会像钩子一样重新评估并且没有问题的函数,但我也需要来自我以前的上下文的信息,因此解决方法并不能真正解决我的问题。
相关链接
我已确定该问题不是 HTML 问题,因此我不会包含指向我尝试过的 HTML 修复程序的链接。该问题虽然由 css 触发,但并非根源于 css,因此我也不会包含 css 链接。