javascript - 为什么在初始加载之前反应计算渲染两次?
问题描述
我的印象是反应渲染计算一次并将其与 DOM 进行比较以进行更改?
但是,从我的简单示例中:https ://codesandbox.io/s/admiring-rain-ej8fu?file=/src/App.js似乎甚至在组件安装之前。渲染函数被执行了两次。我还在下面附上了一个截图来澄清我的观点。在控制台中你可以看到console.log(value)
被评估了两次。我想知道我在这里犯了什么概念错误!
代码:
import React, { useState, useEffect } from "react";
function Load() {
const [value, setValue] = useState("intial Value");
console.log(value);
useEffect(() => {
console.log("mounted");
}, []);
return (
<div>
<h1>{value}</h1>
<button onClick={e => setValue(Math.random())}>Update state</button>
</div>
);
}
export default Load;
截图: 反应初始重新加载错误
解决方案
这是因为 codesandbox 使用 React Strict Mode。React Strict Mode 是为了更好地调试,因此,在渲染后重新运行所有生命周期方法以确保它们是“安全的”。你可以在这里阅读更多关于它的信息。因此,只需删除 index.js 文件中的 React.StrictMode 标记。
推荐阅读
- git - 如何更改 IntelliJ 中的 git gutter 与哪个提交进行比较
- apache-kafka - 无法发送大卡夫卡消息
- mysql - mysql从select中的值创建命名表
- c - 为什么我得到这个元素的内存地址?
- c++ - 堆数组中对象的构造函数
- amazon-cloudformation - Cloudformation EKS 在 terraform 中启动配置用户数据等效项
- c# - 如何在 Android 或 IOS Unity 中设置从 Image Capture by Camera 可读的纹理?
- swift - 如何将粒子系统附加到节点的“底部”
- python - 从 Python 中的子组获取基本统计信息
- docker - 从 docker 镜像中删除环境变量