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

前端 - 帮分析一个 React 重复渲染的问题?

单于皓轩
2025-07-03

https://codesandbox.io/p/sandbox/8x72fk

https://yjnsth.csb.app/

代码已经去掉了 StrictMode

最开始input输入框内是 abcdf, 当我输入e的时候 query变成abcdfe ,
但是此时deferredValue 仍然是abcdf. 因为query的变化所以 需要render APP, 因为deferredQuery 没有变化所以不会render SearchResults(该组件被memo了).

当deferredquery变成abcdfe的时候 会触发render app 然后在renderSearchResults.

为什么从日志上看 会有两次相同的

(render App
index.js:27 query: abcdfe deferredQuery: abcdfe
index.js:27 render SearchResult ,query: abcdfe) ?

image.png

共有1个答案

陶泳
2025-07-03

这是react的策略,是正常现象,在use之前一定会打印两遍(第一遍react要判断是否挂起),use之后可能会两遍(和网速,缓存,浏览器是否空闲有关),如果是放到useEffect里边就是一遍,具体可以参考5b12c8a1-d3f0-4be2-9942-c19c948d2738.png

 类似资料:
  • 本文向大家介绍浅谈React前后端同构防止重复渲染,包括了浅谈React前后端同构防止重复渲染的使用技巧和注意事项,需要的朋友参考一下 什么叫前后端同构? 为了解决某些问题(比如SEO、提升渲染速度等)react 提供了2个方法在服务端生成一个HTML文本格式的字符串。在得到了这个HTML格式的字符串之后,通常会将其组装成一个页面直接返回给用户的浏览器。 到这里,服务端的活已经干完了,然后就是浏览

  • 因此,在去年与react合作之后,我设法理解了它的功能和注意事项,以及如何避免不必要的渲染。 昨天我在玩一些代码,遇到了一个以前没有看到的问题,有点困惑。 在上面的代码中,我添加了一个简单的计数器,每次单击都会设置一个新的状态,这会导致重新渲染,在屏幕上显示“Count:1”,并在dev工具中显示一个“counter render”日志,就像我预期的那样。 奇怪的部分来自渲染变量,我用数字0启动(

  • 问题内容: 我已经写了一些代码来渲染ReactJS中的重复元素,但是我讨厌它是如此丑陋。 有没有更好的方法来实现这一目标? (我想在模板代码或类似方法中嵌入循环。) 问题答案: 您可以将表达式放在大括号内。请注意,在已编译的JavaScript中,为什么在JSX语法中永远不可能发生循环;JSX相当于函数调用和加糖的函数参数。仅允许使用表达式。 (此外:请记住将属性添加到在循环内渲染的组件。) JS

  • 我是新的反应,也对stackoverflow, 我正在尝试将 this.state.searchResults 呈现为附加代码 代码运行时没有任何错误,但是没有呈现。我到底做错了什么? 我在我的主js文件中导出这个组件。如果我不使用map方法运行,它会正确地渲染。 请帮帮忙 代码图像

  • 起因 问题的起因是左侧模版列表在开发时没有测试最多五百条数据的极限,当数据列表达到五百条的时候,就单纯的改变checkbox组件状态(选中或者不选中之间切换),就很慢,看了一下性能分析,一个click事件在4倍降低CPU的情况下长达4s的长任务,我不理解 :) 这里我在控制台中,发现列表并没有重新渲染所有节点,而且也没有接口调用。仅仅五百个节点就这样,虚拟dom性能有点... 顺便补充一下:rea

  • 在使用 nuxt 时,nuxt 可以使用 usefetch 进行请求,底层的实现是 ofetch 这个库,这个库支持在服务器端和客户端进行请求,nuxt 做了优化,如果服务器端有请求过的数据会序列化传输到客户端,这样客户端在水合时就不用再发起请求。而在使用 nextjs 时,使用的是 fetch 进行请求,nextjs 对 fetch 进行了扩展,增加了缓存的功能,但是我发现这个扩展的 fetch

  • 根据数据库里面获取到的数据信息渲染表格,起初根据数据结构生成了四列,但是由于后续数据库里面会有数据结构上的变化,会增加字段,那我要如何在表格中去追加这部分新数据,从而在前端渲染出一个新的表格————就是说原来四列变六列,并把对应数据也一同渲染上去。

  • 我无法呈现一个selectOneMenu,但只能禁用该项目 例如,这是可行的: 而这个不是: 有什么建议吗 谢谢