Redux 状态已更新但 UI 未渲染,不使用 react-redux 如何实现自动更新?
根本原因
Redux本身是独立的状态管理库,和React的渲染机制没有默认绑定,不会自动触发React组件重渲染。你之前用react-redux能正常生效,是因为react-redux内部已经封装了「监听Redux状态变化、对比需要更新的组件、触发重渲染」的完整逻辑,裸用Redux时这部分逻辑需要自己实现。
另外你的代码还存在一个错误:createStore直接写在App组件内部,App组件每次重渲染都会生成全新的store实例,原有store的状态、订阅都会直接丢失。
修复方案
- 将store实例移到组件外部,保证全局唯一
- 用Redux原生的
store.subscribe方法监听状态变化,将最新状态同步到React的本地状态触发重渲染 - 组件卸载时取消订阅,避免内存泄漏
修复后的完整代码如下:
import "./styles.css"; import { useState, useEffect } from "react"; import { createStore } from "redux"; import { incrementCount, reducer } from "./reducer"; // store移到组件外部,全局唯一 const store = createStore(reducer); export default function App() { // 用React本地状态触发重渲染 const [state, setState] = useState(store.getState()); useEffect(() => { // 订阅store状态变化 const unsubscribe = store.subscribe(() => { setState(store.getState()); }); // 组件卸载时清理订阅 return unsubscribe; }, []); return ( <div className="App"> <h1>Hello CodeSandbox</h1> <h2>Start editing to see some magic happen!</h2> {state.value} <button onClick={()=> store.dispatch(incrementCount(1))}>Increment Count</button> </div> ); }
内容的提问来源于stack exchange,提问作者garg10may
相关产品推荐
相关产品推荐

