React - прохождение обработчиков событий, которые нуждаются в аргументах в качестве реквизита для дочерних компонентовJavascript

Форум по Javascript
Ответить Пред. темаСлед. тема
Anonymous
 React - прохождение обработчиков событий, которые нуждаются в аргументах в качестве реквизита для дочерних компонентов

Сообщение Anonymous »

Я новичок в реагировании, поэтому, когда я закончил учебник Tic-Tac-Toe из документации, я начал делать проблемы, чтобы улучшить игру и практику. Я застрял во втором вызове:
"2. Переписать доску для использования двух циклов для создания квадратов вместо их жесткой кодирования."
Это был компонент доски, прежде чем я начал вызов.function Board({xIsNext, squares, onPlay}) {

function handleClick(i) {
if (squares || calculateWinner(squares)) return;

const nextSquares = squares.slice();
xIsNext ? (nextSquares = "X") : (nextSquares = "O");
onPlay(nextSquares)
}

const winner = calculateWinner(squares);
let status;
status = winner ? "Winner: "+winner : "Next player: "+(xIsNext ? "X" : "O");

return (

{status}

handleClick(0)} />
handleClick(1)} />
handleClick(2)} />

handleClick(3)} />
handleClick(4)} />
handleClick(5)} />

handleClick(6)} />
handleClick(7)} />
handleClick(8)} />


);
}
< /code>
Просмотр шаблона, который был в повторении строк и квадратов, я переписал код в это. < /p>
function Board({xIsNext, squares, onPlay}) {

function handleClick(i) {
if (squares || calculateWinner(squares)) return;

const nextSquares = squares.slice();
xIsNext ? (nextSquares = "X") : (nextSquares = "O");
onPlay(nextSquares)
}

const squareComponents = []
const rowComponents = []

for (i = 0; i < 9; i++) {
squareComponents.push( handleClick(i)}/>);
}

for (i = 0; i < 3; i++) {
rowComponents.push(

{squareComponents.splice(0,3)}

)
}

const winner = calculateWinner(squares);
let status;
status = winner ? "Winner: "+winner : "Next player: "+(xIsNext ? "X" : "O");

return (

{status}
{rowComponents}

);
}
< /code>
Страница рендерирует, но когда вы щелкнуте на любой из квадратов на доске, «X» появляется только на четвертом квадрате. Как будто все обработчики кликов квадратных компонентов ссылаются на четвертую площадь. Почему это происходит? Поэтому я изменил первый для цикла в компоненте платы на это: < /p>
squareComponents.push();
< /code>
и я изменил квадратный компонент на это: < /p>
function Square(props) {
return (
props.onSquareClick(props.onSquareClickArgument)}>
{props.value}

);
}
< /code>
Это сработало. Но почему мое первое решение этой проблемы не было, а это?>

Подробнее здесь: https://stackoverflow.com/questions/797 ... components
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Понимание событий и обработчиков событий в C#
    Anonymous » » в форуме C#
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Понимание событий и обработчиков событий в C#
    Anonymous » » в форуме C#
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Правильная структура класса для обработчиков событий, чтобы избежать дублирования кода?
    Anonymous » » в форуме JAVA
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • Почему слушатель событий не отвечает, когда я устанавливаю ключ на значение реквизита?
    Anonymous » » в форуме Html
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Динамическое связывание обработчиков событий
    Anonymous » » в форуме Jquery
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Javascript»