最近开始学习react,刚看完官方的教程TicTacToe,对onClick事件绑定的语法不是很理解,所以来这里提问,求大家帮忙解答。下面是官方教程里的代码:
class Board extends React.Component {
constructor() {
super();
this.state = {
squares: Array(9).fill(null),
xIsNext: true,
};
}
handleClick(i) {
const squares = this.state.squares.slice();
squares[i] = this.state.xIsNext ? 'X' : 'O';
this.setState({
squares: squares,
xIsNext: !this.state.xIsNext,
});
}
renderSquare(i) {
return (
<Square
value={this.state.squares[i]}
onClick={() => this.handleClick(i)}
/>
);
}
render() {
const status = 'Next player: ' + (this.state.xIsNext ? 'X' : 'O');
return (
<div>
<div className="status">{status}</div>
<div className="board-row">
{this.renderSquare(0)}
{this.renderSquare(1)}
{this.renderSquare(2)}
</div>
<div className="board-row">
{this.renderSquare(3)}
{this.renderSquare(4)}
{this.renderSquare(5)}
</div>
<div className="board-row">
{this.renderSquare(6)}
{this.renderSquare(7)}
{this.renderSquare(8)}
</div>
</div>
);
}
}
其中这一段:
renderSquare(i) {
return (
<Square
value={this.state.squares[i]}
onClick={() => this.handleClick(i)}
/>
);
}
绑定onClick事件时,为什么不直接写成onClick={this.handleClick(i)}
呢?
箭头函数等同于
function() {
return this.handleClick(i);
}
的话,那么我的理解两种写法应该是等效的,但第二种貌似过不了编译。刚入门很多不懂,求大家解答一下,十分感谢!
这些老铁都说的什么啊。。
如果 直接写
你这样函数在render的时候已经执行了呀,肯定不行噻,
所以说要这样
但是 这个函数 需要携带一个 i 的参数过去
所以 就要用一个匿名函数把i 带过去啊。。
这样闭包 让 i 对 renderSquare 的i 保持引用
bind this 是另外一个问题吧 就像有一位老铁说的
xx = ()=> { 代码 }
this就指向 当前 class,这个是class的类属性写法,需要babel-plugin-transform-class-properties
不晓得我说对没有