只需添加useState hook语句,导致组件重新呈现

时间:2020-04-08 15:06:39

标签: reactjs

我已经创建了一个基本的 create-react-app ,并添加了以下语句

const [stateA, setStateA] = useState(false);

,然后将console.log放入组件中。 完整的组件代码是

import React, { useState } from 'react';
import logo from './logo.svg';
import './App.css';

const App = () => {
  const [stateA, setStateA] = useState(false);

  console.log("rendered");
  return (
    <div className="App">
      <header className="App-header">
        <img src={logo} className="App-logo" alt="logo" />
        <p>
          Edit <code>src/App.js</code> and save to reload.
        </p>
        <a
          className="App-link"
          href="https://reactjs.org"
          target="_blank"
          rel="noopener noreferrer"
        >
          Learn React
        </a>
      </header>
    </div>
  );
}

export default App;

它两次显示“渲染”。谁能说出为什么会这样吗?

1 个答案:

答案 0 :(得分:2)

如果您注意到index.js(由于create-react-app现在默认使用React.StrictMode)文件,则您可能有一个名为React.StrictMode的包装程序,它负责此额外的重新渲染。包装器将调用renderconstructor和其他生命周期方法来检测副作用。因此,这是预期的。

您可以在此处了解更多信息:https://reactjs.org/docs/strict-mode.html#detecting-unexpected-side-effects

希望这会有所帮助!