在变量中存储 const 值与在状态中存储 const 值有区别吗?

2024-01-08

我注意到有几种方法可以在 React 功能组件中实现看似相同的事情。当您拥有本质上仅在该组件内部需要的配置值(只是一个常量值,从未传入或修改)时,您可以只使用常规const或者您可以将其存储在组件的状态中。

标准变量:

function Example1() {
  const a = 1
  return <div>{ a }</div>
}

存储状态:

function Example2() {
  const [a] = useState(1)
  return <div>{ a }</div>
}

我的印象是,在幕后这将导致 Example1 在每次渲染上创建一个变量,然后处理它,而 Example2 将创建一次变量并维护它直到组件被卸载。准确吗?就性能/良好实践而言,这些方法之一是否更可取?


准确吗?

是的,正如你所说,Example1在每个渲染上创建一个变量(在范围末尾将其标记为“一次性” - 与 React 无关,但与 Javascript 相关),Example2创建变量一次并维护它直到组件被卸载(或者该变量的状态通过setState).

就性能/良好实践而言,这些方法之一是否更可取?

作为一个好的做法 -Example1.

至于性能,应该是Example1. Example2 runs useState并比较值a每次渲染时都使用先前的状态,这比声明变量“昂贵得多”。

一个更好的例子是比较元件参考/memoized变量与变量(Example1):

function Example2() {
  const a = useRef(1);
  const b = useMemo(() => 1, []);
  return <div>{a.current} , {b}</div>
}

但答案几乎保持不变。

看到这样的代码表明refa 可能会改变。指某东西的用途useMemo表明b is a “重计算”变量,如果没有,这只是一个开销(与上面的解释相同)并且更好地使用实施例1.

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

在变量中存储 const 值与在状态中存储 const 值有区别吗? 的相关文章

随机推荐

  • 计算闰年的Java代码

    我正在关注 Java 的艺术与科学 一书 它展示了如何计算闰年 本书使用了ACM Java Task Force 的库 这是本书使用的代码 import acm program public class LeapYear extends C
  • C# Thread.Sleep(0) 是什么意思?

    意思是没有延迟吗 一本书上说如下 Thread Sleep 0 放弃线程的当前时间片 立即 主动将CPU交给其他线程 这是否意味着即使应该执行一条语句 给 sleep 0 也会暂时跳过执行 0表示没有minimum控制权将返回给线程之前的时
  • 使用Python列表作为队列的效率

    一位同事最近编写了一个程序 其中使用 Python 列表作为队列 换句话说 他用了 append x 当需要插入物品时 pop 0 当需要移除物品时 我知道Python有collections deque http docs python
  • 如何让 TProgressBar 停止滞后?

    我有一个运行大量操作的应用程序 并且我正在尝试使用 TProgressBar 来跟踪正在发生的情况 我设置了多个步骤 并调用 StepIt 来增加进度条 问题是 它并没有很好地跟上 它似乎不喜欢直接跳到正确的位置 而是逐渐滑动到正确的位置
  • 如何获取调用别名方法的名称?

    我正在调用方法link to admin然后我给另一个方法起了别名simple link to def link to admin name url options My stuff here link to name url option
  • 使 Http DefaultClient 的execute()非常慢

    我的 HttpDefaultClient 的 execute 方法的执行方法存在大量性能问题 我目前正在使用它来将数据发布到服务器 接收 JSON 并反序列化数据 我的手机打电话需要 8 到 30 秒 如果我切换到 Wifi 速度相当快 在
  • Wix:安装过程中忽略对话框中的属性更改

    我在 Wix 文件中有一个属性 该属性公开用于在对话框中进行编辑 在下面的示例中 它是 MyProperty 该属性用于创建注册表项 但是 如果在对话框中更改属性 则不会使用更改后的值 而是默认值 SomeProperty 但是 如果我在另
  • Python 多处理问题?

    我有一个包含 500 个输入文件的文件夹 所有文件的总大小约为 500 MB 我想写一个python执行以下操作的脚本 1 将所有输入文件加载到内存中 2 初始化一个空的python稍后将使用的列表 参见项目符号 4 3 启动 15 个不同
  • 如何使用 Huggingface Trainer 微调 gpt-j

    我正在尝试使用 Huggingface 训练器微调 gpt j 但惨败 我遵循了引用 bert 的示例 但是当然 gpt j 模型并不完全类似于 bert 模型 该错误表明模型没有产生损失 这很好 但我不知道如何让它产生损失或如何改变训练者
  • 如何在postgresql中使用for循环创建多个表

    如何使用一个表创建多个表forpostgresql 中的循环 例如 我需要创建 c emloyee r employee i employee 等 我在 FOR 附近遇到语法错误 bin sh Invoke postgre SQLVARCH
  • 将流拆分为具有 N 个元素的子流

    我们能否以某种方式将 Java 中的流拆分为不超过 N 个元素的子流 例如 Stream
  • 如何在.NET中编辑EXIF数据[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在编写一个照片库 共享网站 并且想要 1 将 EXIF 数据写入服务器上存储的 JPEG 以及 2
  • npm install 正在我的角度项目根目录中构建 .cmd 文件

    我有一个项目已经工作了很长一段时间 它已经构建和编译 并且仍然在不同的机器上执行 了几个月 现在 当我运行命令 npm install 时 它会正常运行 但在该过程结束时 它会在我的项目的根文件夹中构建大量 cmd 文件 以及另一个附带文件
  • 根据条件从列表中删除项目

    我有一个这样的结构 public struct stuff public int ID public int quan 并想要删除该产品ID is 1 我目前正在尝试这个 prods Remove new stuff prodID 1 它不
  • 如何在 Docker Compose V3 中扩展服务?

    我有一个docker compose yml看起来像 version 2 services redis image redis mysqldb image mysql 5 7 environment MYSQL ROOT PASSWORD
  • blogger+video.js 我如何添加质量级别,如 1080p、720p、480p

    我在我的中添加 video jshttps www blogger com https www blogger com网站 但我如何添加 1080p 720p 480p 等质量级别 我添加的代码 在头 在身体里
  • Angular 2 - 链接 http 请求

    我从 httpService 获取 RxJS Observable 这是来自 Angular 的实际 http 现在 一旦我得到积极的结果 我想处理我得到的下一个 http 请求this retrieve 这或多或少是串联请求 有更好的方法
  • 有没有办法为函数创建预处理器宏?

    是否可以根据函数结果创建 C 预处理器宏 例如 我想在预处理器宏定义中动态保存屏幕高度 define SCREEN HEIGHT GetSystemMetrics SM CYVIRTUALSCREEN 然后我想使用结果根据屏幕高度设置值 i
  • Spring Boot,如何在不使用 ldif 的情况下使用 LDAP 进行身份验证?

    我正在 Spring Boot 中尝试 LDAP 身份验证示例here https spring io guides gs authenticating ldap 它使用 ldif 方法 我认为该方法不适用于我的要求 因为我们的 ldap
  • 在变量中存储 const 值与在状态中存储 const 值有区别吗?

    我注意到有几种方法可以在 React 功能组件中实现看似相同的事情 当您拥有本质上仅在该组件内部需要的配置值 只是一个常量值 从未传入或修改 时 您可以只使用常规const或者您可以将其存储在组件的状态中 标准变量 function Exa