reactjs - 为什么在使用状态钩子(useState)时react会重新渲染两次?
问题描述
我App
基于reactjs 的state hook示例创建了一个组件useState
。这是我的代码:
import React, { useState } from 'react';
import logo from './logo.svg';
import './App.css';
function App() {
console.log("before");
const [count, setCount] = useState(0);
console.log("after");
return (
<div>
<p>You clicked {count} times</p>
<button onClick={() => setCount(count+1)}>
Click me
</button>
</div>
);
}
export default App;
当我使用节点运行它时,App
会在以下位置呈现一个按钮http://localhost:3000/
:
根据 reactjs 示例附带的解释(上面的链接),我希望单击按钮会导致App
重新渲染一次。但是,单击(一次)实际上会导致重新渲染发生两次:
为什么这个例子会导致重新渲染发生两次?
我怎样才能纠正这个问题,以免发生不必要的事情?
注意:每次单击时,“之前”和“之后”的两个新行都会打印到控制台,因此每次单击都会出现双重渲染,而不是由于初始渲染。
解决方案
您看到的是第一个“之前”和“之后”来自初始渲染,第二对来自您单击按钮并更新状态时。
似乎有问题的代码来自<React.StrictMode>
ReactDOM.render(
<React.StrictMode>
<App />
</React.StrictMode>,
document.getElementById('root'),
);
删除<React.StrictMode>
摆脱了这个问题。
ReactDOM.render(<App />, document.getElementById('root'));
推荐阅读
- python - 消除一维数组中的斑点/斑点
- ios - 获取默认日历时出错,仅第一次出现,但之后工作正常
- xquery - 3 个查询总和不等于数据库中总文档数的精确值?
- java - 如何在主线程的 onCreate/ 中获取房间列表的大小?
- java - eclipse Oxygen 2“控制台”空白
- java - 我无法解决此问题 无法解析构造函数 BarData(java.lang.String
- drupal - Drupal 增加分页索引从 1 开始而不是 0
- angular - angular2 / 4 上的 getDate() 错误
- hadoop - Hadoop 3.0 纠删码:对文件读取性能的影响?
- apache - RandomSortField 没有给出相同的结果 Apache Solr 5.5