React:将函数作为道具传递

Gil*_*iwu 9 javascript reactjs

我有一个关于将函数作为道具传递的问题.在最后的tic-tac-toe教程(https://facebook.github.io/react/tutorial/tutorial.html)中,Game组件传递onClick处理程序:

<div className="game-board">
  <Board
    squares = { current.squares }
    onClick = {(i) => this.handleClick(i) }
  />
</div>
Run Code Online (Sandbox Code Playgroud)

首先,为什么我们不能这样传递函数:

onClick = { this.handleClick(i) }
Run Code Online (Sandbox Code Playgroud)

我知道传递"我"很重要,但教程中间的某些内容让我很困惑:

return <Square value={this.state.squares[i]} onClick={() => this.handleClick(i)} />;
Run Code Online (Sandbox Code Playgroud)

这里我们不在箭头函数的括号中传递"i".我不想写太多,以使问题不那么冗长.我相信有些人已经完成了本教程,并能够回答我的问题.

更新:Tnx大家的简短和有用的答案.作为后续,在官方文档中,我们被告知绑定一个函数,如果它要用作组件的事件处理程序.为什么这是必要的,为什么它从来没有用过教程?

Dav*_*yon 7

这不会传递函数(它在绑定之前调用函数onClick):

onClick = { this.handleClick(i) }
Run Code Online (Sandbox Code Playgroud)

或者,您可以绑定:

onClick = { this.handleClick.bind(null, i) }
Run Code Online (Sandbox Code Playgroud)

但箭头功能似乎更清晰(至少恕我直言).

对于第二个问题,它i是一个参数handleClick,而不是onClick. onClick确实有参数(第一个是event对象),但在这种情况下,你不需要onClick参数中的任何东西,所以它们都是空的.


Lui*_*rra 5

放在onClick参数中的内容将在渲染过程中执行,这不是您想要执行的操作。您想要在DOM事件期间执行一些操作。

这就是本教程为您提供粗箭头语法的原因:这意味着您正在调用一个函数,该函数返回另一个函数(在本例中为handleClick方法),因此,在呈现标记时,它将在参数内执行该函数并返回您的函数,这将在用户单击元素时完成真正的工作。

  • “React”组件安装过程中发生的“事件”步骤的有趣分解。 (2认同)