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