Я новичок в реагировании, поэтому, когда я закончил учебник 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
React - прохождение обработчиков событий, которые нуждаются в аргументах в качестве реквизита для дочерних компонентов ⇐ Javascript
Форум по Javascript
1757858435
Anonymous
Я новичок в реагировании, поэтому, когда я закончил учебник Tic-Tac-Toe из документации, я начал делать проблемы, чтобы улучшить игру и практику. Я застрял во втором вызове:
"2. Переписать доску для использования двух циклов для создания квадратов вместо их жесткой кодирования."
Это был компонент доски, прежде чем я начал вызов.function Board({xIsNext, squares, onPlay}) {
function handleClick(i) {
if (squares[i] || calculateWinner(squares)) return;
const nextSquares = squares.slice();
xIsNext ? (nextSquares[i] = "X") : (nextSquares[i] = "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[i] || calculateWinner(squares)) return;
const nextSquares = squares.slice();
xIsNext ? (nextSquares[i] = "X") : (nextSquares[i] = "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>
Это сработало. Но почему мое первое решение этой проблемы не было, а это?>
Подробнее здесь: [url]https://stackoverflow.com/questions/79764346/react-passing-event-handlers-that-need-arguments-as-props-to-child-components[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия