You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Redux 状态已更新但 UI 未渲染,不使用 react-redux 如何实现自动更新?

根本原因

Redux本身是独立的状态管理库,和React的渲染机制没有默认绑定,不会自动触发React组件重渲染。你之前用react-redux能正常生效,是因为react-redux内部已经封装了「监听Redux状态变化、对比需要更新的组件、触发重渲染」的完整逻辑,裸用Redux时这部分逻辑需要自己实现。

另外你的代码还存在一个错误:createStore直接写在App组件内部,App组件每次重渲染都会生成全新的store实例,原有store的状态、订阅都会直接丢失。

修复方案
  1. 将store实例移到组件外部,保证全局唯一
  2. 用Redux原生的store.subscribe方法监听状态变化,将最新状态同步到React的本地状态触发重渲染
  3. 组件卸载时取消订阅,避免内存泄漏

修复后的完整代码如下:

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 23:45:03