当前位置: 首页 > 知识库问答 >
问题:

奇怪的渲染问题[重复]

仲俊豪
2023-03-14

因此,在去年与react合作之后,我设法理解了它的功能和注意事项,以及如何避免不必要的渲染。

昨天我在玩一些代码,遇到了一个以前没有看到的问题,有点困惑。

import React, { useCallback, useState } from "react";

let renders = 0;

const Counter = () => {
  const [count, setCount] = useState(0);

  const increment = useCallback(() => {
    setCount((c) => c + 1);
  }, []);

  renders = renders + 1;

  console.log("Counter Render");

  return (
    <div>
      <button onClick={increment}>increment</button>
      <h2>renders: {renders}</h2>
      <h4>Count: {count}</h4>
    </div>
  );
};

export default React.memo(Counter);

在上面的代码中,我添加了一个简单的计数器,每次单击都会设置一个新的状态,这会导致重新渲染,在屏幕上显示“Count:1”,并在dev工具中显示一个“counter render”日志,就像我预期的那样。

奇怪的部分来自渲染变量,我用数字0启动(在组件之外,当然),并在组件的每次渲染上递增我点击按钮,“渲染”的值增长2,即使“计数器渲染”日志每次显示一次。

下面是一个沙盒的例子

谁能解释一下我错过了什么?

共有1个答案

姬选
2023-03-14

您正在React的严格模式下运行(因为您的应用程序被包装在中)

Strict模式可以多次渲染组件,以确保您没有做一些不正常的事情,例如依赖渲染计数,而您现在正是这样做的。;-)

 类似资料:
  • 问题内容: 在过去的六个月中,我一直在与Backbone合作。前两个月很混乱,学习并弄清楚我要如何围绕它构建代码。接下来的4个月,该公司推出了适合生产的应用程序。不要误会我的意思,Backbone使我摆脱了以前标准的成千上万行客户端代码的混乱,但是它使我能够在更短的时间内完成更多宏伟的事情,从而带来了一系列全新的问题。对于我在这里提出的所有问题,有一些简单的解决方案,感觉像是骇客或只是 错误 。我

  • 你好,新年快乐; 我有一个关于我在项目中创建的JS文件的奇怪问题。 我正在使用PhpStom和Symfony工作,当我在js文件夹中创建一个JS文件时,不管怎样,如果我将它命名为"main.js"无疑会将这个文件变成一个文本文件,即使我选择创建一个JavaScript文件。 如果我给它取其他名字,它会很好用的。为了纠正这个问题,我可以很容易地更改名称,但这是一个联合项目,我无法更改。 我正在寻找P

  • 从昨天开始,我已经开始与Android Studio的工作。我的问题是当我做我的布局。我有下一个错误(观看屏幕截图了解更多信息): 渲染问题:此版本的渲染库比您的Android Studio版本更新。请更新Android Studio 如果我检查更新,他会说我已经有了最新版本的Android studio,所以我无法更新。 我也在SDK管理器中安装了一些东西,请看下面的截图。 有人能帮我解决这个问

  • 我是android studio的新手,安装了一个新版本(1.5.1版)。出于某种原因,我一直收到一条错误消息(每次我使用应用程序主题时),说有渲染问题:缺少样式。我在网上寻找解决方案,但大多数都过时了,或者根本不起作用。 谢谢你的帮助。 清单文件: 构建渐变:

  • 问题内容: 这是目录树: 在main.go中: 在client_test.go中: 错误: 我已经阅读了如何在golang中使用自定义软件包?而且我认为我有和这个人一样的解决方案,但是我只是不知道如何解决这个问题。请帮忙。 去环境: 问题答案: 命令去,测试包。 名称与文件模式“ * _test.go”匹配的文件可以包含测试函数,基准函数和示例函数。 不要使用保留名称。例如,将与贯穿始终。

  • 问题内容: 我以前从未见过这种情况,很奇怪。 我有一个针对的本地SQL Server 2012 Express数据库。使用TestDrive插件运行简单的测试套件,并使用EF v5访问数据库。 我只是运行了一个将记录插入数据库的测试。我的表中有9行,其ID为1-9。下一个插入和ID恰好跳了10000 !!!! Id列为: 我知道插入失败也会增加ID,但我可以保证在测试运行之间的5秒内没有10,00