为什么一个简单的 React 组件会渲染两次?

2024-04-10

我刚刚启动了一个新的 create-react-app 项目,并注意到 React 渲染组件两次!我的反应版本在包.json is "react": "^16.13.1"

import React, { useRef } from "react";

const App = () => {
  const renders = useRef(0);
  console.log("renders: ", renders.current++);

  return (
    <div>
      Hello
    </div>
  );
};

这会在第一次渲染时产生:

renders: 0
renders: 0

现在,如果我添加一个按钮来增加状态,每个状态更改还会产生两个额外的渲染:

import React, { useRef } from "react";

const App = () => {
  const [count, setCount] = useState(0);
  const renders = useRef(0);
  console.log("renders: ", renders.current++);

  return (
    <div>
      <button onClick={() => setCount(count + 1)}>increment</button>
      <div>count: {count}</div>
    </div>
  );
};

这将导致:

//--- initial render
renders: 0
renders: 0
//--- first click
renders: 1
renders: 2
//--- second click
renders: 3
renders: 4
//--- third click
renders: 5
renders: 6

这是正常现象还是最新版本的 React 中的错误?


好吧,看来我找到了原因。检查后index.js我发现了以下内容:

ReactDOM.render(
  <React.StrictMode>
    <App />
  </React.StrictMode>,
  document.getElementById('root')
);

看起来 create-react-app 现在包括React.StrictMode它在开发模式(而不是生产模式)下双重调用某些方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么一个简单的 React 组件会渲染两次? 的相关文章

随机推荐

  • 如何在使用 jQuery 添加新行时刷新简单的数据表

    我认为这个很简单 但我找不到与 ajax 加载的数据或数组中提供的数据无关的参考 我在现有的 HTML 表上使用 DataTables 基本代码如下 table wizard dataTable lengthChange false iDi
  • 测试使用 IntersectionObserver 的代码

    我的应用程序中有一个处理无限滚动分页的 JavaScript 组件 我正在尝试重写它以使用IntersectionObserver 如上所述here https developers google com web updates 2016
  • 为每个因子组添加单独的 vlines 到 ggplot(变量重要性随机森林的点图)

    我正在使用 ggplot2 制作随机森林中六个相关变量重要性结果的点图 我的数据 我已经使用 reshape2 将其转换为长格式 如下所示 我的真实数据集有点大 Factor Group Value Gender A 0 000127 Ag
  • 如何在 emacs elisp 中查找哪个文件提供该功能

    目前我正在使用加载历史记录变量来查找某个功能来自的文件 假设找到该文件的特征gnus来自 我在暂存缓冲区中执行以下代码 该代码在单独的行中连续打印文件名和符号 dolist var load history princ format s n
  • 正则表达式和 GWT

    我的问题是 在GWT中使用正则表达式有没有好的解决方案 例如 我对 String split regex 的使用不满意 GWT 将代码翻译为 JS 然后将正则表达式用作 JS 正则表达式 但我无法使用 Java Matcher 或 Java
  • 使应用程序在越狱设备上自行重启

    我的 iOS 应用程序是否可以在每次用户访问其主屏幕时自动重新启动 这是针对越狱设备的 该应用程序不适用于应用程序商店 一般来说 鉴于应用程序外部的特定用户操作 如何让我的应用程序重新启动 加速度计 如果您只想让您的应用程序在遇到某些加速计
  • 使用其名称来响应渲染组件

    我正在试验 React js 它运行得非常好 我想知道是否可以将类注入到其他类中 如下所示 var Container React createClass render function lt this props implComponen
  • Windows 中的 Perl Kill(0, $pid) 总是返回 1

    我正在尝试制作一个 Perl 脚本来运行 Windows 中的一组其他程序 我需要能够捕获进程的 stdout stderr 和退出代码 并且需要能够查看进程是否超出了分配的执行时间 现在 我的代码的相关部分如下所示 pid open3 w
  • 如何在 Rails 中实现计数器缓存?

    我有一个帖子控制器和一个评论控制器 帖子有很多评论 评论属于帖子 关联是在 counter cache 选项打开的情况下设置的 如下所示 Inside post rb has many comments Inside comment rb
  • 自定义指令中的 ng-class 不观察更新

    我正在尝试创建一个像这样使用的指令
  • OpenCV 模板匹配 N 个最佳匹配不起作用

    我已经为此苦苦挣扎了很长一段时间 但似乎找不到这里的问题 让我尝试引导您完成整个过程 我正在尝试为我的模板匹配获取 10 个最佳边界框 不会在这里显示整个图像 但这是我的cv mat当我循环遍历cv mat搜索最低值 结果 int a b
  • ggplot2:如何调整图例中的线型+顺序?

    我想调整以下 ggplot 中的线型 因此 我在 data frame df 中引入另一列来表示线型 但是一旦我将其转换为因子 线型而不是 方法 就会出现在图例中 参见试验 3 如何获得传说中的 方法 最后我希望能够 自由选择线型 自由选择
  • 为什么反射可以访问C#中类的受保护/私有成员?

    为什么反射可以访问C 中类的受保护 私有成员 这对课堂来说不安全吗 为什么反思会被赋予如此大的力量 这是一个反模式 http en wikipedia org wiki Anti pattern 会员可访问性不是安全功能 它的存在是为了保护
  • 仅在 iOS 和 Android 中处理数据通知失败

    我有一个发送推送通知的服务器 对于Android 我覆盖onMessageReceived来处理消息 对于 iOS 我使用NotificationExtension I need更改传入的推送通知 我不知道标题和服务器端的所有内容 客户端知
  • HttpClient HttpResponseMessage 地址/URI

    我正在开发一个 C WinRT 应用程序 该应用程序向网络服务器发出 POST 和 GET 请求 有谁知道使用 HttpClient 对象时是否有办法获取响应 URI 地址 如果我使用 HttpWebRequest HttpWebRespo
  • 使用jq连接多个文件中的JSON数组

    我有一系列包含记录数组的 JSON 文件 例如 cat f1 json records a 1 a 3 cat f2 json records a 2 我想 1 从每个记录中提取一个字段 2 输出一个包含所有输入文件中所有字段值的数组 第一
  • C:创建静态库并使用 Makefile 进行链接

    我在尝试着了解静态和共享库 http randu org tutorials c libraries php 我想执行以下操作来创建一个单独编译和链接的 makefile 以便创建和链接静态库 形成最终的静态可执行文件 我有以下 Makef
  • 在java应用程序中使用“bcc”发送电子邮件而不使用“to”

    我已经阅读了 stackoverflow 中的所有参考资料 然而 没有任何东西符合我们的目标 我该如何使用bccjava中的sendmail方法 根据 SMTP 的 RFC RFC 2821 link http www ietf org r
  • mySQL SELECT 即将到来的生日

    我正在尝试编写一个查询来选择数据库中生日在未来 7 天内的用户 我做了很多研究 但无法想出可行的解决方案 生日字段存储为 varchar 例如 04 16 93 有什么办法可以处理这个吗 这是我到目前为止所拥有的 SELECT FROM P
  • 为什么一个简单的 React 组件会渲染两次?

    我刚刚启动了一个新的 create react app 项目 并注意到 React 渲染组件两次 我的反应版本在包 json is react 16 13 1 import React useRef from react const App