Reactjs 是否需要显式绑定函数?

Reactjs 是否需要显式绑定函数?,reactjs,Reactjs,当我将函数传递给我使用的组件时,我有一个名为multiply的函数和一个名为NumberInputField的组件: <NumberInputField id='1' action={this.multiply} /> 但我也看到: <NumberInputField id='1' action={this.multiply.bind(this)} /> 他们两个似乎都工作。有区别吗?一种方式更容易接受吗?编辑: 这取决于函数正在做什么。如果您需要访问状态、道

当我将函数传递给我使用的组件时,我有一个名为multiply的函数和一个名为NumberInputField的组件:

<NumberInputField id='1' action={this.multiply} />

但我也看到:

<NumberInputField id='1' action={this.multiply.bind(this)} />

他们两个似乎都工作。有区别吗?一种方式更容易接受吗?

编辑:

这取决于函数正在做什么。如果您需要访问状态、道具等,那么您需要绑定它。最佳实践是将其创建为箭头函数或在构造函数中绑定


如果不是,则不是。但是,最佳做法是将该函数移动到一个帮助文件中,这样,如果它是一个可重用的函数,那么将来可以再次使用它。

当您
绑定一个函数时,您将给出您当前所在类的函数上下文。例如,如果
multiply()
函数需要使用
this.setState()
,则需要使用
bind
,以便该函数具有适当的上下文

但是,在渲染方法中使用
bind
不是一个好主意。为什么?因为每次调用
render
,将再次发生
bind
。相反,您可以在构造函数中绑定函数

e、 g

更好的是,如果您使用babel的转换类属性插件,您可以这样编写函数

export default class App extends Component {

    multiply = () => {
       //Automatically knows about "this"
    };

}

虽然有些答案确实指出,只有在您应该访问该函数中的“this”时才需要它。了解最佳实践也很重要。不要在呈现方法中绑定。

函数是否使用此
?函数是如何定义的?您使用的是什么版本?所有这些信息都会影响答案。如果答案有帮助,请将其标记为已接受。在不显示
此的代码的情况下。乘法
,很难知道您不理解的部分。由于函数是编写的,我不需要将操作绑定到此@underwood下面的答案解决了问题
export default class App extends Component {

    multiply = () => {
       //Automatically knows about "this"
    };

}