Ответ, который пытается сделать то же самое со мной: https://stackoverflow.com/a/45785715/8126531
Привет, я делаю учебник по ReactJS здесь, и я в основном в той части, где он просит заменить:
render() {
return (
<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>
);
}
}
с 2 петлями, чтобы сделать квадраты вместо жесткого кодирования.
Концептуально, я не знаю, ошибся ли я, но я пытался поместить все элементы в массив, а затем отобразить его следующим образом:
render() {
return (
<div>{ this.createBoard(3, 3) }</div>
);
}
createBoard(rows, columns) {
let htmlBlock = [];
for (let i = 0; i < columns; i++) {
htmlBlock.push(<div className="board-row">);
for (let j = 0; j < rows; j++) {
htmlBlock.push(this.renderSquare(j));
}
htmlBlock.push(</div>);
}
return htmlBlock;
}
но я получаю сообщение об ошибке в консоли, говорящее, что точка с запятой после «строки» является неожиданным токеном. Если я передам элементы в htmlBlock в виде строки, то вывод будет именно тем, что я хочу, за исключением того, что в консоли это буквальная строка, а не HTML.
Может ли кто-нибудь сказать мне, почему у меня эта ошибка, или если я концептуально ошибся, и я должен делать это по-другому?
Ваше здоровье.
Кстати, не уверен, что это актуально, но я использую веб-пакет, и файлы jsx передаются и упаковываются.
[РЕШЕНО]: Всем спасибо за ответы. Благодаря пользователю "emma" мне удалось заставить его работать. Я думаю, проблема в том, что вы не можете поместить "неполный" HTML-блок в массив и отобразить его. Ниже приведены изменения, которые я сделал:
createBoard(rows, columns) {
let htmlBlock = [];
for (let i = 0; i < columns; i++) {
// htmlBlock.push(<div className="board-row">);
let test = [];
for (let j = 0; j < rows; j++) {
test.push(this.renderSquare(j));
}
htmlBlock.push(<div> { test }</div>);
}
return htmlBlock;
}
Еще раз спасибо ребята!!