我今天开始使用新的皮棉(tslint react),它给了我以下警告:

"在JSX属性中禁止使用lambda,因为它们会影响渲染性能"

我知道这会导致在每次渲染时创建一个新函数.它可能会触发不必要的重新渲染,因为子组件会认为它的props 已更改.

但我的问题是,如何将参数传递给循环中的事件处理程序:

customers.map( c => <Btn onClick={ () => this.deleteCust(c.id) } /> );

推荐答案

绝对不是反模式.

lambda(箭头函数)对渲染性能没有影响.

唯一有影响的是shouldComponentUpdate的实施.默认情况下,此函数返回true,这意味着始终呈现组件.这意味着,即使props 不变,组件仍会再次渲染.这是默认行为.

如果不实现shouldComponentUpdate,将箭头函数更改为绑定方法不会提高性能.

的确,不使用箭头函数可以简化shouldComponentUpdate的实现,它们不应该与PureComponent一起使用,但它们不是反模式.它们可以简化许多模式,例如在函数中添加额外参数时(例如,在示例中所做的操作).

还要注意,React有无状态组件,它们甚至不能实现shouldComponentUpdate,因此它们总是被呈现的.

在真正发现性能问题之前,不要考虑性能影响.

Reactjs相关问答推荐

如何通过TEK查询将对象传递到Express后台

props 可以在Reaction中锻造吗?

下拉Tailwind CSS菜单与怪异beviour

是否在Extra Reducer完成作业(job)时触发createListenerMiddleware?

React Router:在没有手动页面刷新的情况下,路由不会更新内容

Reaction上下文值无法传递给其他组件

如何使用 React 获取表单中的所有值?

在reactjs中刷新页面时丢失状态值

React Context API 在 Next.js 中更改路由时获取默认数据

React Native - 如何处理错误带有有效负载的NAVIGATE操作..未被任何导航器处理?

Firebase Storage: 对象不存在图片上传路径错误

cypress `cy.now()` Type 'Promise' 没有调用签名

图像路径很奇怪,部署 Next.js 应用程序后我看不到任何图像

如何实现 redux 工具包来注册用户?

React - 使用 React 显示错误和积极alert

使用 react-markdown 组件时 Tailwind CSS 的问题

Reactjs 表单未反映提交时的更改

如何将值从下拉列表传递到 select 上的输入?响应式JS

如何使用 cypress 获取 MUI TextField 的输入值?

React useEffect hooks return () => cleanup() vs return cleanup