react-redux中useStore()返回对象是否会在组件生命周期内变化?
React-Redux useStore() 返回值稳定性与RxJS流写法分析
核心结论
useStore() 在组件的整个生命周期内始终返回同一个Redux store实例,完全不需要考虑它随时间变化的情况。
Redux本身采用单例设计,整个应用只会创建一个store实例;react-redux的Provider组件会将这个store注入上下文,useStore()只是从上下文中读取这个固定实例,所以无论组件渲染多少次,返回的store对象都是同一个。
你的代码写法是否正确?
你的写法是可行的,但可以优化得更简洁规范:
因为store不会变化,你可以用useMemo创建RxJS流,避免手动判断useRef的初始化状态:
function MyComponent() { // ... const store = useStore(); // 依赖数组传入store,因store永远不变,此回调只会执行一次 const storeStream = useMemo(() => from(store), [store]); // ... }
如果坚持用useRef,你的原写法也没问题——storeStreamRef.current只会在组件首次渲染时被赋值一次,后续渲染中store仍是同一个对象,不会导致流实例过期或逻辑错误。
为什么不需要监控store变化?
除非你手动在应用中创建多个store实例并动态切换Provider的store属性(这属于极特殊的边缘场景),否则正常情况下,useStore()返回的store实例是全局唯一且稳定的,完全不需要额外监控其变化。
内容的提问来源于stack exchange,提问作者JohnB
相关产品推荐
相关产品推荐

