react-router-cache-route icon indicating copy to clipboard operation
react-router-cache-route copied to clipboard

v1.12.1 useDidRecover拿不到最新的redux中的state

Open chocking opened this issue 2 years ago • 8 comments

相关issure: https://github.com/CJY0208/react-router-cache-route/issues/115 相关文件: https://github.com/CJY0208/react-router-cache-route/blob/v1.12.1/src/core/Updatable.js

import { useSelector } from 'react-redux';
import { useDidRecover } from 'react-router-cache-route';

export default () => {
  const stateA = useSelector((state: RootState) => state.stateA);

 useDidRecover(() => {
    console.log('did recover: ', stateA.count);
  },[stateA.count]);

 ...
}
...

大致代码如上,当页面隐藏时全局store数据改变了,useDidRecover的effect没有更新(因为react-freeze的原因?),导致didRecover时拿到的是旧数据,目前尝试切回到v1.11.1一切正常

chocking avatar Feb 08 '22 09:02 chocking

是的,应该是 react-freeze 的原因,我调整下 freeze 的时机,改为延迟冻结

CJY0208 avatar Feb 09 '22 01:02 CJY0208

试试 1.12.4

CJY0208 avatar Feb 09 '22 06:02 CJY0208

请问下如果redux的更新是在延迟冻结后的话,效果不是一样的吗,因为依赖的store的更新时机是人为操作的、不确定的

chocking avatar Feb 09 '22 06:02 chocking

不太确定,按理来说 freeze 后组件就不再更新了,上边的代码如果获取不到最新值,也需要考虑可能是闭包问题

CJY0208 avatar Feb 09 '22 06:02 CJY0208

感觉不让缓存了的页面进行更新 很容易出现问题,就拿上面的代码来说,就算页面隐藏起来了,但是当全局的stateA.count更新了之后,应该是要重新触发调用useDidRecover,把新的callback传过去的。不仅是全局store这种情况,在页面隐藏之后,页面的任何props变化了,useDidRecover callback里面的都是旧的值。

chocking avatar Feb 09 '22 09:02 chocking

升级到 1.12.4 还是拿不到最新的 state @CJY0208

chapery avatar Feb 09 '22 09:02 chapery

更新了 1.12.5,发布当中,优化了 effect 的引用,可以不再传入 deps,尝试避免闭包问题

CJY0208 avatar Feb 09 '22 10:02 CJY0208

为什么我的1.12.5这样import会报错? import { useDidCache, useDidRecover } from 'react-router-cache-route';

TrendAlan avatar Feb 28 '22 02:02 TrendAlan