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

请求协助排查Redux应用运行报错问题

Redux代码运行错误修复方案

错误原因及修复步骤

1. 缺少Redux和React-Redux的CDN引入

你采用HTML+Script标签的运行环境,无法使用ES6的import语句,必须添加对应的CDN脚本才能获取Provider、createStore等方法。在页面<head>中补充以下代码:

<script src="https://unpkg.com/redux@4/dist/redux.min.js"></script>
<script src="https://unpkg.com/react-redux@7/dist/react-redux.min.js"></script>

同时删除<script type="text/babel">内的所有import语句,全局环境下这些方法会挂载到window对象,直接通过Redux.createStore、ReactRedux.Provider这类方式调用即可。

2. 组件变量名不匹配+未声明就使用

你定义的组件是小写的counter,但后续连接Redux时误用了大写的Counter,且Counter未提前声明。按照React组件规范,组件名需首字母大写,同时保证变量名一致:

// 修正组件名首字母大写
const Counter = (props) => {
  // 内部逻辑不变
}

连接Redux时需正确引用该组件,同时用const/let声明变量:

const ConnectedCounter = ReactRedux.connect(mapStateToProps, mapDispatchToProps)(Counter);

3. 箭头函数return语句的自动分号问题(ASI)

你的组件return后直接换行,JavaScript会自动在return后插入分号,导致返回undefined,组件渲染为空。需将JSX与return放在同一行,或用括号包裹JSX:

const Counter = (props) => {
  function handleClick() {
    props.incrementCounter(1);
  }
  
  // 用括号包裹JSX避免ASI问题
  return (
      <div>
        <p>{props.count}</p>
        <button onClick={handleClick}>Increment</button>
      </div>
  );
}

修正后的完整代码

<!DOCTYPE html>
<html>
<head>
    <title>Page Title</title>
    <script src="https://unpkg.com/react@16/umd/react.development.js" crossorigin></script>
    <script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js" crossorigin></script>
    <script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
    <!-- 补充Redux和React-Redux的CDN -->
    <script src="https://unpkg.com/redux@4/dist/redux.min.js"></script>
    <script src="https://unpkg.com/react-redux@7/dist/react-redux.min.js"></script>
</head>
<body>
  <div id="root"></div>
  <script type="text/babel">
      function incrementCounter(num) {
          return {
              type: 'INCREMENT',
              num: num
          }
      }
      const initialState  = {
          count: 0
      };
      
      function reducer(state= initialState, action) {
          switch(action.type) {
            case 'INCREMENT': 
              return { count: state.count + action.num  }
            default:
              return state
         }
      }
      
      const Counter = (props) => {
          function handleClick() {
              props.incrementCounter(1);
          }
          
          return (
              <div>
                <p>{props.count}</p>
                <button onClick={handleClick}>Increment</button>
              </div>
          );
      }
      
      function mapStateToProps(state) {
          return {
              count: state.count
          };
      }
      
      const mapDispatchToProps = {
          incrementCounter 
      }
      
      let store = Redux.createStore(reducer);
      
      const ConnectedCounter = ReactRedux.connect(mapStateToProps, mapDispatchToProps)(Counter);
      
      ReactDOM.render(
         <ReactRedux.Provider store={store}>
          <ConnectedCounter/>
         </ReactRedux.Provider>,
        document.getElementById("root")
      );
  </script>
</body>
</html>

内容的提问来源于stack exchange,提问作者sonyTheCoder

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 09:33:19