我已经创建了一个基本的 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;
它两次显示“渲染”。谁能说出为什么会这样吗?
答案 0 :(得分:2)
如果您注意到index.js
(由于create-react-app
现在默认使用React.StrictMode
)文件,则您可能有一个名为React.StrictMode
的包装程序,它负责此额外的重新渲染。包装器将调用render
,constructor
和其他生命周期方法来检测副作用。因此,这是预期的。
您可以在此处了解更多信息:https://reactjs.org/docs/strict-mode.html#detecting-unexpected-side-effects
希望这会有所帮助!