#html #reactjs
#HTML #reactjs
Вопрос:
У меня есть этот код, как я могу добавить тег на основе индекса? Я хочу создать сетку с 3 столбцами
<div>
{items.map((row, i) => (
{i % 3 === 0 amp;amp; <div className={'grid-container'}>}
<UniversityCard data={row} />
{i % 3 === 2 amp;amp; </div>}
))}
</div>
этот код возвращает Parsing error: Unexpected token
Как я могу показать тег на основе index mod?
Обновить:
{items.map((row, i) => (
i % 3 === 0 ? <div className={'grid-container'}> : <>
<UniversityCard data={row} />
{i % 3 === 2 ? </div> : </>}
))}
</div>
Проблема в последнем {i%3===2}
it return expression expected
Комментарии:
1. Вы уже находитесь в функции map. Вам не нужно использовать фигурные скобки внутри функции map.
=> ()
<— удалите эти скобки и замените их на{ }
. Затем внутри тела функции добавьте управляющую структуру и обязательно верните JSX2. @Dilshan я обновил свой ответ. он возвращает
expression expected
Ответ №1:
Как я понял, вам нужно зациклить массив и создать структуру примерно так, как показано ниже,
<div class="row">
<div class="col"></div>
<div class="col"></div>
</div>
<div class="row">
<div class="col"></div>
<div class="col"></div>
</div>
Вот как я бы это сделал. Вы не можете просто вернуть только закрывающий тег в JSX. Я добавил два дополнительных компонента, <Row/>
и <Col/>
просто для того, чтобы было понятно.
/**Credit for chunk method - https://github.com/30-seconds/30-seconds-of-code */
const chunk = (arr, size) =>
Array.from({ length: Math.ceil(arr.length / size) }, (v, i) =>
arr.slice(i * size, i * size size)
);
const data = ["A", "B", "C", "D", "E", "F"];
function UniversityCard(prop) {
return <div>{prop.data}</div>;
}
function Row({ children }) {
return <div className="my-row">{children}</div>;
}
function Col({ children }) {
return <>{children}</>;
}
export default function App() {
const chunked = chunk(data, 3);
const renderColForRow = (data) => {
return data.map((d) => {
return (
<Col>
<UniversityCard data={d} />
</Col>
);
});
};
return (
<>
{chunked.map((ch) => {
return <Row>{renderColForRow(ch)}</Row>;
})}
</>
);
}
Да, у вас есть два цикла, и это может быть не лучшим решением для цикла большого массива.
Или простой способ, возможно, использовать сеточную систему bootstrap. Если вы используете bootstrap, в JavaScript вам нужно сделать только,
data.map((row, i) => {
return <div className="col-md-4"></div>
})
Комментарии:
1. Спасибо. это сработало !. все еще учусь у кода. в настоящее время я использую Material-ui core grid system. вот почему я не могу использовать className на основе
2. Ох. Извините, у меня нет опыта работы с сеткой meterial-ui. Когда я пишу в React, я использую meterial ui для компонентов пользовательского интерфейса и bootstrap для сетки. Кстати, вы можете добавлять пользовательские стили к своим компонентам. В Meterial-UI есть несколько крючков для этого.
makeStyle
и т. д,