Я пытаюсь реализовать tic-tac-toe, чтобы реагировать на его изучение. Тем не менее, я серьезно запутался в передаче обработчиков событий.
Я пытаюсь передать handleClick
в Square
от Game
до Board
. clickHandler
работает, но i
и j
остаются неопределенными.Передача обработчиков событий в качестве реквизита в Реагировании.
class Game extends Component {
constructor() {
super();
this.state = {squares: Array(3).fill(Array(3).fill(null))};
}
render() {
return(
<div className="game">
<p> STATUS </p>
<Board squares={this.state.squares} handleClick={(i,j) => this.handleClick()}/>
</div>
)
}
handleClick(i,j) {
console.log(i);
console.log(j);
}
}
class Board extends Component {
constructor() {
super();
}
renderSquare(i,j) {
return <Square value={this.props.squares[i][j]} handleClick={ (i,j)=> this.props.handleClick(i,j) }/>;
}
render() {
const board = this.props.squares.map((row,i) =>row.map((j,k)=> this.renderSquare(i,k)));
return(
<div className="board">
{board}
</div>
);
}
}
function Square(props) {
return(
<button className="square" onClick={(i,j) => props.handleClick()}>
</button>
);
}
Ну, конечно, они не определены, если вы их не пройдете! – Li357
То, что меня больше всего смущает, это то, что i и j фактически определены в 'renderSquare()' of 'Board', поэтому я получаю кнопку eventHandler в кнопке. –
Вы должны передать i и j в 'handleClick' компонента' Game' ... – Li357