在变量中存储 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 值有区别吗? 的相关文章

  • 如何通过aws-sdk(javascript或node)获取s3存储桶大小

    我尝试使用 javascript nodejs aws sdk 查找 获取 s3 存储桶信息 但没有找到这样的 api 如何通过 aws sdk javascript 或 node api 获取 s3 存储桶大小 信息 每天一次向 Clou
  • 在 Javascript 中本地化字符串

    我目前正在使用 resx文件来管理我的 NET 服务器端资源 我正在处理的应用程序还允许开发人员将 JavaScript 插入各种事件处理程序中以进行客户端验证等 对我来说本地化 JavaScript 消息和字符串的最佳方法是什么 理想情况
  • React/Redux bundle.js 太大

    我有一个小型的 React 项目 Webpack生成的bundle js大小为6 3Mb 如何将大小减小到 github webpack config js module exports devtool inline source map
  • 如何在提交表单之前删除自动数字格式?

    我正在使用 jQuery 插件自动数字 http www decorplanit com plugin 但是当我提交表单时 我无法删除之前字段上的格式POST 我尝试使用 input autonumeric destroy 和其他方法 但它
  • 离子旋转器未显示

    我用 http 请求填充 Ionic 集合重复列表 但我不想将所有内容直接加载到 DOM 中 因此 我只显示其中一些项目 并在您向下滚动时添加其余项目 为此我实现了无限滚动功能 当我到达页面底部时 它应该显示一个旋转器 但它没有 这些物品至
  • 更新 Google 地图流量层而无需重新加载页面

    我的页面中嵌入了 Google 地图 我使用 initMap js 函数来初始化地图 function initMap var map new google maps Map document getElementById t map zo
  • React router.push 和 router.replace 之间的区别?

    有什么区别React 路由器推送 and 路由器 替换 路由器历史记录就像一个stack of routes 当您使用router replace 您将覆盖堆栈的顶部 当使用router push 它在顶部添加了一条新路线stack 路由器
  • 在 php、ajax 或 javascript 中加载进度?

    任何人都知道如何在系统仍在服务器端获取数据的同时在客户端显示加载进度以及完成的百分比 例如 当我在客户端按下 确定 按钮时 它会调用服务器端从数据库收集数据 整个过程可能需要2到3分钟 如何在客户端显示加载进度 大约加载完成了多少 我怎样才
  • AngularJS 输入字段未从控制器内的 setTimeout 更新

    我正在使用 AngularJS 支持的页面 并且我需要在只读输入文本字段内显示正在运行的时钟 与data ng model 为了模拟运行的时钟 我使用了 JavaScript 调度程序setTimeout每 1000 毫秒调用一个函数 该函
  • 哪些网络浏览器不支持 Javascript?以及如何识别客户端使用的是哪个浏览器?

    是否有不支持 javascript 的网络浏览器 以及如何确定客户端是否正在使用这些浏览器之一 或者客户端禁用了javascript 是否有不支持 javascript 的网络浏览器 当然 Lynx http en wikipedia or
  • 获得一次性绑定以适用于 ng-if

    这个问题已经被之前问过 https stackoverflow com questions 23969926 angular lazy one time binding for expressions 但我无法让该解决方案发挥作用 所以我想
  • 如何将当前元素传递给 Knockout.js 绑定中的 Javascript 函数?

    因此 我尝试根据是否选中子复选框 使用 Knockout js 将类添加到元素 为此 我试图通过this作为我的函数的参数 目前 我的精简 DOM 结构如下 tr td td tr
  • 带时间戳的 Firestore 查询

    如果它是文本字段 我可以使用 where 条件获取数据 但是当我尝试对时间戳字段和日期执行相同操作时 事情不起作用 这是我的代码 home ts firebase firestore collection cities where time
  • 浏览器默认区域设置 - Intl.DateTimeFormat 与 navigator.language

    在对网站进行编码并格式化日期时 我想使用用户在浏览器中设置的区域设置 例如 如果用户定制了他们的chrome settings languages在 Chrome 中设置为非默认值 这就是我想要使用的值 但是 当我在此类浏览器的控制台中运行
  • HTML 和 JavaScript - 将滚动操作从一个元素传递到另一个元素

    假设我有两个 div div div div A scrollable list div 我想让它当光标停在里面时 control并且鼠标滚轮滚动 view将会滚动 无论如何要实现这一目标 好的 快速修复对我有用 即使固定 div 不可滚动
  • (0, eval) () 的作用是什么? [复制]

    这个问题在这里已经有答案了 以下内容来自这个问题 https stackoverflow com questions 14119988 return this 0 evalthis 14120023 14120023 function q
  • toLocaleDateString() 在 Chrome 中如何工作?

    我理解了javascript方法toLocaleDateString 使用的计算机设置 让我们来W3Schools 示例 http www w3schools com jsref tryit asp filename tryjsref to
  • 如何在 JavaScript 中对关联数组进行排序?

    我需要为我的一个项目通过 JS 对关联数组进行排序 我发现这个函数在 Firefox 中运行得很好 但不幸的是它在 IE8 OPERA CHROME 中不起作用 无法找到使其在其他浏览器中运行的方法 或者找到另一个适合该目的的函数 我真的很
  • 如何修复nodejs Express服务器中的“MulterError:意外字段”?

    我正在设置一个服务器来从客户端上传 zip 文件 服务器运行express和multer来执行此操作 上传文件时 服务器抛出 MulterError 意外字段 错误 我无法弄清楚是什么导致了它 我尝试过使用 png 图像 效果很好 但对于
  • Apollo 客户端延迟刷新

    In Apollo Client v3React 实现 我使用钩子来使用订阅 当我从订阅接收数据时 我想重新获取查询 但前提是查询之前已执行过并且位于缓存中 有办法实现这一点吗 我首先进行惰性查询 然后在收到订阅数据时手动检查缓存 然后尝试

随机推荐

  • 计算闰年的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