Итак, чтобы полностью объяснить, что здесь происходит, в первую очередь необходимо понять, почему важно хранить логики компонентов c в родительских компонентах, где это возможно. Таким образом, он сохраняет квадратный компонент более пригодным для повторного использования в будущем, поскольку работа квадратного компонента состоит в том, чтобы просто визуализировать простой html и не беспокоиться ни о чем другом.
Итак, когда вы go визуализируете квадрат, мы фактически передаем функцию родительских компонентов как опору:
renderSquare(i)
{
return (
<Square
value={this.state.squares[i]}
onClick={() => this.handleClick(i)}
/>
);
}
Так что теперь представьте, что квадрат был функцией и аргумент, который она принимает это функция, которая в основном выглядела бы так
function Square(onClick) {
//so now you have access to the parents "handleClick" method
}
Это приведенный выше пример, но в действительности он будет находиться в объекте props, поэтому вы получите к нему доступ в своем примере с помощью this.props.onClick
. Поэтому, когда по квадрату щелкают, он запускает функцию примерно так this.props.onClick()
. Помните, что это вызов метода родительских компонентов handleClick
, который был передан в квадрат. Кроме того, i кэшируется в вызове функции, поэтому, если вы щелкнете по 6-му квадрату, его индекс будет равен 5. Поэтому, когда он перейдет к установке состояния, он установит состояние для 6-го квадрата (5 индексов в массиве) как ' x 'в родительском компоненте.
Теперь, когда состояние установлено, компонент будет повторно визуализироваться из-за того, как методы жизненного цикла работают в React. Таким образом, он будет oop проходить через каждое сохраненное состояние и передавать это значение в квадрат, который должен отображаться.
edit: Также, если вы хотите знать, какие события выдаются вам в ответ, я бы предложил читая эти два:
https://reactjs.org/docs/events.html https://reactjs.org/docs/handling-events.html