reactjs 为什么React会将页面渲染两次?[duplicate]

e0bqpujr  于 2023-01-25  发布在  React
关注(0)|答案(1)|浏览(92)
    • 此问题在此处已有答案**:

Why is my React component is rendering twice?(8个答案)
昨天关门了。
在以下App.js的最小工作示例中:

import { useState, useEffect } from "react";

export default function App() {
  const [isShown, setIsShown] = useState(true);
  return (
    <>
      <button onClick = {() => setIsShown(!isShown)}>
        {isShown? 'Hide Counter' : 'Show Counter'}
      </button>
      {isShown? <Counter /> : null}
    </>
  );
}

function Counter(){
  const [count, setCount] = useState(0);
  const [bool, setBool] = useState(false);

  useEffect(() => {
    console.log('render');
  });
  
  useEffect(() => {
      console.log('mounted');
    }, []);
  return (
    <div className="counter">
      <button onClick={() =>setBool(!bool)}>Re-Render</button>
      <button onClick={() =>setCount(count + 1)}>Increment</button>
      <p> Count: {count}</p>
    </div>
  );
}

我得到两组控制台日志(即消息"render"和"mounted"显示两次)每当我刷新页面或当我点击"隐藏计数器",然后点击"显示计数器"。我的期望是"render"和"show"应该只显示一次。在当前的情况下,这似乎意味着组件在每次页面加载时呈现两次。我在Firefox和Chrome上测试过,发现两者都有相同的行为。
为什么会这样?我如何开始调试它?

0lvr5msh

0lvr5msh1#

这是因为React严格模式,如果你从你的索引文件中删除它,你不会得到两个渲染。

相关问题