首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在React组件渲染中初始化数组(就性能而言)

在React组件渲染中初始化数组(就性能而言)
EN

Stack Overflow用户
提问于 2019-10-10 12:42:09
回答 3查看 1.7K关注 0票数 1

众所周知,我们不应该在渲染中使用匿名函数,因为它们将在每次渲染时重新创建。但是像这样的对象数组呢:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// name props is passed in so it seems like there is a point in initializing the array inside the component
const Component = ({ name }) => {
  // let's imagine there is a lot of large objects
  const bigArray = [{id: 1, name}, {id: 2, name}];

  return <AnotherComponent data={bigArray} />;
}

我假设数组(和里面的对象)是通过引用来存储的,所以当组件被重新呈现时,解释器会看到这是相同的引用,因此不会重新创建数组。我的假设正确吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-10-10 12:46:19

不,这不是同一个引用。在每次渲染时,您都会在内部创建包含新对象的新数组。如果它是完全静态的,你可以将它从你的函数中提取出来以保持相同的ref:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const name = 'some-name';
const bigArray = [{id: 1, name}, {id: 2, name}];

const Component = () => (
   <AnotherComponent data={bigArray} />;
);

但是在你的例子中,这个数组是从prop生成的。您可以使用useMemo()钩子对其进行优化:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const Component = ({ name }) => (
  const bigArray = useMemo(
    () => [{id: 1, name}, {id: 2, name}],
    [ name ]
  );

   <AnotherComponent data={bigArray} />;
);
票数 3
EN

Stack Overflow用户

发布于 2019-10-10 12:51:31

不幸的是,在使用React.ComponentReact.FunctionnalComponent时,似乎每一次更改都会重新呈现整个数组。

我们可以考虑使用React.PureComponent作为解决此问题的方法,有关详细信息,请单击此处:https://codeburst.io/react-array-re-render-performance-ee23f34c5d66

票数 1
EN

Stack Overflow用户

发布于 2019-10-10 12:44:52

如果您将bigArray然后(考虑到它不会改变)移动到一个更全局的状态,这会更好。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// let's imagine there is a lot of large objects
const bigArray = [{id: 1, name}, {id: 2, name}];

// name props is passed in so it seems like there is a point in initializing the array inside the component
const Component = ({ name }) => {
  return <AnotherComponent data={bigArray} />;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58323150

复制
相关文章
CSS overflow 内容溢出时的显示方式
以前不知道 overflow 的滚动条样式是可以修改的,最近做的一个官网项目中前端提供的静态模板自定义了滚动条样式,才得知还有这么个东西,在此记录一下自定义滚动条的写法,这样可以更好的理解用法,虽然下次使用还要来这里看
很酷的站长
2022/12/16
2.3K0
CSS overflow 内容溢出时的显示方式
网页上的内容无法选中复制该如何解决?
有些网页出于信息安全考虑,会对网页做种种限制,比如让用户无法选中,那如何才能选中我们想要的内容进行复制呢?
越陌度阡
2022/11/27
2.5K0
phpExcel导出文件时内存溢出的问题
在使用PHPExcel导出文件时,经常会因为文件过大导致PHP内存溢出报错,为了解决这个问题,可以使用PHPExcel提供的参数进行优化。这里说的Excel文件过大并不一定是文件大小,更关键的在于文件内存放的数据和格式,如果数据很多,格式又比较丰富,那很容易会将PHP的内存耗尽。
大江小浪
2018/07/24
2.5K0
网页加载时waiting(TTFB)时间过长的问题解决
经过一系列的网页优化+静态化页面后,确实快了,但是之前的方法也保留了。今天通过其它地方的文章外链访问一篇文章的时候等了16秒左右...  简直了,不能甩锅给服务器配置了,带宽够得啊。正好得空,就经过一番查找然后解决了。
sunonzj
2022/06/21
1.1K0
网页加载时waiting(TTFB)时间过长的问题解决
解决网页乱码问题
我们在创建Servlet时会覆盖service()方法或doGet()/doPost(),这些方法都有两个参数:代表请求的request和代表响应的response。service方法中的response的类型是ServletResponse,而doGet/doPost方法的response的类型是HttpServletResponse,HttpServletResponse是ServletResponse的子接口,功能和方法更加强大,今天呢,阿Q带大家了解一下HttpServletResponse。
阿Q说代码
2021/05/13
1.5K0
解决网页乱码问题
如何解决网页的宽高自适应问题
在假期里较系统的学习了html的静态网页制作,但在这过程中出现了一系列问题,比如:如何用盒子模型布局;如何用html和css实现轮播图的效果等;值得我们关注的是很多同学遇到了一个相同的问题,当我们的静态网页在其他PC端显示时,会出现排版混乱等情况,那么该如何解决宽高自适应的问题呢?在我经过几天的接触和学习之后,我对如何解决自适应问题有了初步的认识和经验,在此分享给大家,帮助大家快速了解和学习html。
算法与编程之美
2019/10/10
2.6K0
如何解决网页的宽高自适应问题
QQ网页快捷登录有问题如何解决
远程情况下,QQ支持VNC协议,不支持RDP协议,如果是RDP远程Windows,远程会话中的QQ是无法在线网页快捷登录的,参考https://cloud.tencent.com/developer/article/1882259
Windows技术交流
2023/01/09
3.4K1
解决retrofit OKhttp创建大量对外连接时内存溢出
这个问题是这样发生的,我的表中有一批数据,量级较大,数百万个,它们有个地址Address字段,标明了地理位置。我需要对这一批数据根据地址去百度或者高德地图去查询经纬度,并且保存下来。 原本是直接分页读取该表,每次读取几百条,然后一条一条去获取经纬度并且保存。后来发现实在太慢,一秒也就能处理个三五条。所以开启了多线程,大约30个线程,每个线程处理不同id范围的数据。 此时问题出现了,每个线程中都有for循环来分页读取DB中的地址数据,然后每条数据都要去百度地图请求一次,网络请求用的是retrofit,retrofit是包装的OKHttp。
天涯泪小武
2019/01/17
3.7K0
解决前端打包出现内存溢出问题
在公司的项目上在测试环境打包还没遇到过,但是通过公司的上线平台打包前端 JS 代码的时候,在打包日志下发现了构建失败的错误日志,具体报错信息可以看下图
离殊
2022/04/01
3.2K0
解决前端打包出现内存溢出问题
如何解决 Linux 实例 pip 操作时的超时问题
  pip 是当前最流行的 Python 安装包管理工具之一,很多阿里云用户会通过 pip 更新系统源。阿里云的 pip 源地址有以下三处:
习惯说一说
2019/07/15
1.5K0
站长须知:HTTP迁移HTTPS时,如何避免发生重复内容问题
目前,网络传输协议已逐步倾向于HTTPS加密协议。而HTTP升级到HTTPS的方法并不难,只需部署一张SSL证书即可,其安装方法并不难。具体系统安装SSL证书方法可参考GDCA SSL证书部署指南。但是其过程有一个比较复杂的问题,就是站点迁移到HTTPS。 HTTP站点迁移到HTTPS时,并非是新建一个站点。如果操作出错,Google就会认为你在新建一个站点。在迁移过程中,会因为重复的内容,新的协议站点会在Google重新计算。毕竟HTTP与HTTPS确实存在差异,一个是为客户端与服务端提供加密协议,是
企鹅号小编
2018/02/07
1.2K0
站长须知:HTTP迁移HTTPS时,如何避免发生重复内容问题
前端基础-CSS内容溢出
取值:auto当内容溢出时,生成滚动条------默认,hidden内容溢出时超出部分隐藏
cwl_java
2020/04/07
5900
前端基础-CSS内容溢出
如何使用Jsoup爬取网页内容?
这是一篇迟到很久的文章了,人真的是越来越懒,前一阵用jsoup实现了一个功能,个人觉得和selenium的webdriver原理类似,所以今天正好有时间,就又来更新分享了。
软件测试君
2020/04/27
1.9K0
有效解决Android加载大图片内存溢出的问题
解决Android加载大图片内存溢出的问题 非著名程序员 今天在交流群里,有人问我他经常遇到加载图片时内存溢出的问题,遇到的情况还是在自己的测试机或者手机里没有问题,做好了, 到了客户手机里就内存
非著名程序员
2018/02/01
1.7K0
有效解决Android加载大图片内存溢出的问题
前端逆向-如何复制网页上内容
有些网页出于信息安全考虑,会对网页做种种限制,比如让用户无法选中,那如何才能选中我们想要的内容进行复制呢?
越陌度阡
2022/05/12
9770
php curl获取网页内容乱码和获取不到内容的解决方法
1.如果用curl请求网页,多方网页使用了gzip压缩,那么获取的内容将有可能为乱码。 解决方法 $url = 'http://www.du52.com'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_USERAGENT, "Mo
joshua317
2018/04/10
4.1K0
Node.js内存溢出时如何处理?
Node.js 做密集型运算,或者所操作的数组、对象本身较大时,容易出现内存溢出的问题,这是由于 Node.js 的运行环境依赖 V8 引擎导致的。如果经常有较大数据量运算等操作,需要对 Node.js 运行环境限制有充分的了解。
coder_koala
2019/08/21
4.9K0
Node.js内存溢出时如何处理?
versionCode溢出的问题
android应用的版本主要由versionCode和versionName来决定,android系统是根据versionCode来验证新的apk是否能安装。如果已安装高版本的应用,就无法使用覆盖安装的方式来装旧的包
meteoric
2018/11/19
1.3K0
点击加载更多

相似问题

如何解决内容溢出问题

20

放大网页时OrbitControls问题

12

如何解决屏幕旋转时RenderFlex溢出的问题?

110

如何解决缩放时网页布局混乱的问题?

118

放大导致溢出

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文