javascript - React Component 和 render 方法被调用了两次
问题描述
在我的组件中,构造函数和渲染方法被调用了两次。我从 create-react-app 创建了一个全新的项目,它只有一个组件,而不是 App 组件,所以它不是那么复杂和复杂,但问题仍然存在。
import React from "react";
import logo from "./logo.svg";
import "./App.css";
import First from "./First";
function App() {
return (
<div className="App">
<First />
</div>
);
}
export default App;
import React, { Component } from "react";
class First extends Component {
static count = 0;
constructor(props) {
super(props);
this.state = {};
console.log("ctor");
alert("ctor");
}
render() {
First.count++;
console.log("Render method", First.count);
return <div>Hello World</div>;
}
}
export default First;
所有其他生命周期钩子都被渲染一次,它们没有问题。
解决方案
这可能是因为您的index.js文件中的 React StrictMode。
ReactDOM.render(
<React.StrictMode>
<App />
</React.StrictMode>,
document.getElementById('root')
);
serviceWorker.unregister();
严格模式检查潜在问题并导致运行一些生命周期方法(如构造函数、渲染、componentShouldUpdate 等)两次。如果它困扰你,你可以简单地删除它,但最好不要。
严格模式检查仅在开发模式下运行;它们不会影响生产构建。
你可以在严格模式上阅读更多关于它的信息
推荐阅读
- apache-spark - 如何在典型的 ML 模型中加载 Spark 流模型或将经过训练的典型 ML 模型加载到流 ML 模型中?
- reactjs - 我正在尝试安装 create-react-app,但它无法正常工作。有人可以帮忙吗?
- laravel - 未定义的变量:_instance - 带有 laravel livewire 的 Summernote 编辑器
- java - 如何解决 org.openqa.selenium.WebDriverException:会话未启动或终止
- android - EditText.getText() 返回空字符串,其中 EditText 不为空;它由 android:hint="Enter Bus Number" 设置
- javascript - React.js,使用 find() 搜索状态
- python - LAB:对电视节目进行排序(字典和列表)
- javascript - 原型对象内的对象或数组的值如何受实例使用的影响?
- c - 打印位数而不是实际值
- vue.js - 如何在 v-for 中获取键、值和索引