javascript - React 中的内联函数导致重新渲染?
问题描述
我在一篇文章中读到,如果您有一些代码,例如:
class Parent extends Component {
render() {
return (
<Child
onClick={() => console.log('You clicked!')}
/>
);
}
}
Child
每次Parent
重新渲染时都会重新渲染,即使它的道具没有变化,只是因为该onClick
函数是内联的,所以它在每次渲染时都会创建一个新的引用。
但是,即使将该功能移到外部render()
,Child
重新渲染..那么我在这里缺少什么?
此外,那篇文章还提到内联函数会增加 React 应用程序的内存占用,因为每次渲染都会创建一个新的函数引用。真的吗?JS 不是有某种自动垃圾收集功能吗?
解决方案
有几件事,您发布的内容仅适用于 Class 组件,而为什么它适用于 Class 组件是您正在创建一个回调函数并将其绑定到组件的实例,因此每次渲染组件,它是使用的同一个回调函数实例。
更多阅读https://www.freecodecamp.org/news/this-is-why-we-need-to-bind-event-handlers-in-class-components-in-react-f7ea1a6f93eb/在“为什么不'我们不需要为箭头函数绑定'this'吗?”
对于一个函数组件,它是不同的,没有类实例,你可以使用useCallback
将记住回调的钩子,给定一组依赖项保持不变。
正如有人在评论中指出的那样,您应该只真正致力于记忆回调等,尽管它们会阻止重新渲染大/深孩子
推荐阅读
- python - Python FuzzyWuzzy 比率:它是如何工作的?
- php - 如何在具有相同 ID 的列中选择不同的值然后删除它们 PHP SQL Server
- javascript - 如何将参数从纯javascript文件发送到html文件
- github - 你怎么能得到一个用户今天用 GitHub API 做了多少贡献?
- node.js - 当我使用 where 时,Firestore 不会检索我的数据
- html - 用于静态内容的 S3 与 DynamoDB
- asp.net-core - 如何在控制器外部发送消息?
- c - 打印由 PE(64 位)导入的 DLL
- python - Python - 当我们检测到符号('|')时拆分列表中的数据
- mql4 - 删除对象的 Mql4 未声明标识符