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
    ,因为它是在节点环境中而不是在浏览器中运行的
  • 要解决这个问题,我们需要让您作为最终用户说“不,我真的希望这是
    useLayoutEffect
    来解决在节点下运行时的计时问题”,而我们目前还没有公开API来解决这个问题
粘贴调试会话中的笔记:

  • react
    react reconciler
    之间存在一个bug,导致
    useffect
    清理函数在不应该运行时运行。这可能是由于
    react
    保留此
    runningEffects
    数组,也可能是由于此特定版本的
    react reconciler
    中出现了一些奇怪的情况。无论哪种方式,您看到的行为的根本原因是,
    提供者
    在不应该被订阅时被取消订阅,因为它正在调用
    useffect
    ,然后在您调度新的Redux操作并将UI更新排队时运行其清理功能。这导致了一系列的被动效果,这一点:
函数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对账器
应该可以解决这个问题。