好的,所以我对React比较陌生,有一件事情一直让我很困扰:我似乎无法得到一个关于如何传递参数给事件处理程序的明确答案。目前我看到有两种方法:
我一直在阅读的主要问题是性能成本。因为内联函数或带有Bind的函数在重新渲染时被视为全新的函数,所以会有额外的GC开销,并且对于类组件,它可能会破坏PureComponent中的shouldComponentRender的浅检查。
然后有些人说这是过度优化,我不应该担心它,只需使用内联函数即可。这很酷,但老实说,所有这些相互矛盾的信息让我感到困惑。
因此,我将包含一个代码示例。它来自我制作的一个井字棋应用程序,以练习React。它是一个用于单个方格的功能组件。该组件重复使用于所有方格,并传递一个键作为prop(例如,TOP_LEFT)以指示它是哪个方格。还有一个单击处理程序,当单击Square时,会将事件发送回父组件。为了让单击处理程序知道单击了哪个Square,该键属性被传递为参数。
请查看此代码并给我反馈。这在React中是可接受的做法吗?它会产生性能损失,那么性能损失会很大吗?最后,如果您的答案是我不应该这样做,请清楚地向我解释更好的做法。
props.squareClick.bind(this, argument)
onClick={() => props.squareClick(argument)}
我一直在阅读的主要问题是性能成本。因为内联函数或带有Bind的函数在重新渲染时被视为全新的函数,所以会有额外的GC开销,并且对于类组件,它可能会破坏PureComponent中的shouldComponentRender的浅检查。
然后有些人说这是过度优化,我不应该担心它,只需使用内联函数即可。这很酷,但老实说,所有这些相互矛盾的信息让我感到困惑。
因此,我将包含一个代码示例。它来自我制作的一个井字棋应用程序,以练习React。它是一个用于单个方格的功能组件。该组件重复使用于所有方格,并传递一个键作为prop(例如,TOP_LEFT)以指示它是哪个方格。还有一个单击处理程序,当单击Square时,会将事件发送回父组件。为了让单击处理程序知道单击了哪个Square,该键属性被传递为参数。
请查看此代码并给我反馈。这在React中是可接受的做法吗?它会产生性能损失,那么性能损失会很大吗?最后,如果您的答案是我不应该这样做,请清楚地向我解释更好的做法。
import React from 'react';
const Square = props => {
return (
<div onClick={() => props.squareClick(props.key)}>
<p>{props.value}</p>
</div>
);
};
export default Square;