我今天开始使用新的皮棉(tslint react),它给了我以下警告:
"在JSX属性中禁止使用lambda,因为它们会影响渲染性能"
我知道这会导致在每次渲染时创建一个新函数.它可能会触发不必要的重新渲染,因为子组件会认为它的props 已更改.
但我的问题是,如何将参数传递给循环中的事件处理程序:
customers.map( c => <Btn onClick={ () => this.deleteCust(c.id) } /> );
我今天开始使用新的皮棉(tslint react),它给了我以下警告:
"在JSX属性中禁止使用lambda,因为它们会影响渲染性能"
我知道这会导致在每次渲染时创建一个新函数.它可能会触发不必要的重新渲染,因为子组件会认为它的props 已更改.
但我的问题是,如何将参数传递给循环中的事件处理程序:
customers.map( c => <Btn onClick={ () => this.deleteCust(c.id) } /> );
绝对不是反模式.
lambda(箭头函数)对渲染性能没有影响.
唯一有影响的是shouldComponentUpdate
的实施.默认情况下,此函数返回true
,这意味着始终呈现组件.这意味着,即使props 不变,组件仍会再次渲染.这是默认行为.
如果不实现shouldComponentUpdate
,将箭头函数更改为绑定方法不会提高性能.
的确,不使用箭头函数可以简化shouldComponentUpdate
的实现,它们不应该与PureComponent
一起使用,但它们不是反模式.它们可以简化许多模式,例如在函数中添加额外参数时(例如,在示例中所做的操作).
还要注意,React有无状态组件,它们甚至不能实现shouldComponentUpdate
,因此它们总是被呈现的.
在真正发现性能问题之前,不要考虑性能影响.