react redux存储更新一次,然后停止更新
我有一个使用react redux存储更新一次,然后停止更新,redux,react-redux,Redux,React Redux,我有一个使用react完成的tui计数器的示例,我想将redux连接到它。代码是 当我按下任何按钮(比如INC)时,它会更新一次,然后停止更新。计数器状态似乎是递增的,但没有呈现到ui。下面是一个输出示例。我不知道我在哪里把线路弄错了,我怀疑,但我尝试了一些方法,但没有成功,因为我不确定这是redux问题还是幸运的问题。任何提示都很好 我是一名Redux维护人员,我实现了React Redux v7 奇怪的巧合是,我最近在Reactiflux中为其他人调试了这个问题(或者至少我认为是其他人)
react
完成的tui计数器的示例,我想将redux连接到它。代码是
当我按下任何按钮(比如INC
)时,它会更新一次,然后停止更新。计数器状态似乎是递增的,但没有呈现到ui。下面是一个输出示例。我不知道我在哪里把线路弄错了,我怀疑,但我尝试了一些方法,但没有成功,因为我不确定这是redux问题还是幸运的问题。任何提示都很好
我是一名Redux维护人员,我实现了React Redux v7
奇怪的巧合是,我最近在Reactiflux中为其他人调试了这个问题(或者至少我认为是其他人)
这里的第一个问题是,您需要使用React-Redux的“备用渲染器”入口点,因为主入口点假定您使用的是React-dom
或React-native
。因此,您需要从“react redux/lib/alternate renders”导入{connect}
然而,即使您这样做了,实际上,react
中也存在一个bug,并且react-Redux中存在某种缺陷。结果是React-Redux的
在调度第一个操作后从存储中取消订阅,这导致所有进一步调度的操作都不会导致UI更新
这是三件事的组合:
正在使用旧版本的react-founded
,该版本中有一个与调用react-reconciler
相关的错误,useffect
确实需要使用最新版本的react-founded
react-reconciler
- 与此相关,React Redux的
仍在调用
而不是我们的useEffect
包装器,但这仍然会退回到实际的useIsomorphicLayoutEffect
,因为它是在节点环境中而不是在浏览器中运行的useEffect
- 要解决这个问题,我们需要让您作为最终用户说“不,我真的希望这是
来解决在节点下运行时的计时问题”,而我们目前还没有公开API来解决这个问题useLayoutEffect
和react
之间存在一个bug,导致react reconciler
清理函数在不应该运行时运行。这可能是由于useffect
保留此react
数组,也可能是由于此特定版本的runningEffects
中出现了一些奇怪的情况。无论哪种方式,您看到的行为的根本原因是,react reconciler
在不应该被订阅时被取消订阅,因为它正在调用提供者
,然后在您调度新的Redux操作并将UI更新排队时运行其清理功能。这导致了一系列的被动效果,这一点:useffect
函数flushPassiveEffects(){
if(被动有效回调句柄!==null){
取消被动效果(被动效果回调句柄);
}
然而,我发现passiveeeEffectcallbackhandle
是未定义的,而不是null
,因此它错误地试图调用cancelpassiveeeffects()
。这看起来像是react-reconciler
版本中的一个bug
然后,这会导致react
尝试清理其runningEffects
数组,从而使用核武器攻击效果处理程序
啊。非常感谢您提供如此详细的演练。我会将此作为一个问题提交给您。redux的“消费者”是否有某种方式可以实际调试这些类型的不匹配错误?理论上,这是“仅仅”另一方面,我花了大约4.5个小时的详细调试才弄明白这一点,真正深入到React-Redux、React-Wized和React-self的核心——我写了React-Redux v7:)我知道R-R和React是如何工作的,并且很清楚应该在哪里查找问题。a任何其他人都可以做同样的工作,但拥有现有的工具知识使我比其他人更容易弄明白这一点。啊..我很害怕。我提交了一个问题,尽管Yomguithereal可能需要一些帮助来解决这个问题。如果你能确定可能取消订阅的位置,那就太好了。对t的评论这里。新发布的react
使用了最新的react对账器
应该可以解决这个问题。