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

React17中StrictMode未触发两次render执行的原因是什么?

问题:StrictMode下点击按钮仅打印一次render的疑惑
  • 实际现象:点击按钮触发状态更新后,控制台仅打印一次render
  • 预期结果:按照StrictMode的特性,应该打印两次render

代码示例

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <script
      src="https://unpkg.com/react@17/umd/react.development.js"
      crossorigin
    ></script>
    <script
      src="https://unpkg.com/react-dom@17/umd/react-dom.development.js"
      crossorigin
    ></script>
    <script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
    <script type="text/babel">
      console.log(React.version, ReactDOM.version);

      class App extends React.Component {
        state = {
          count: 0,
        };
        render() {
          console.log("render");
          return (
            <div>
              <button
                onClick={() => {
                  this.setState({
                    count: this.state.count + 1,
                  });
                }}
              >
                click
              </button>
              <div>count {this.state.count}</div>
            </div>
          );
        }
      }

      ReactDOM.render(
        <React.StrictMode>
          <App />
        </React.StrictMode>,
        document.getElementById("root")
      );
    </script>
  </head>
  <body>
    <div id="root"></div>
  </body>
</html>

补充说明:若切换至React 16版本(引入对应版本的react和react-dom开发库),控制台会打印两次render。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 16:04:57