Придумали два способа визуализации вашей сетки.Существует небольшое различие в поведении в зависимости от того, как вы хотите определить строки.
Вы можете увидеть пример обоих подходов на Stackblitz .
Метод1:
Поместите все столбцы в одну строку и используйте параметры размера столбцов.
export default ({ characters, cardSize, rowSize }) => {
const rowUnit = 12 / rowSize;
const cardLayout = characters
.map((character, i) => (
<Col xs={6} sm={rowUnit} key={`col-${i}`}>
<CharacterCard
key={i + Math.random()}
character={character}
cardSize={cardSize}
/>
</Col>
)
)
return (
<div>
<Container>
<Row>
{cardLayout}
</Row>
</Container>
</div>
)
}
Метод 2:
Сократите массив столбцов в массив строк.
export default ({ characters, cardSize, rowSize }) => {
const rowUnit = 12 / rowSize;
const cardLayout = characters
.map((character, i) => (
<Col sm={rowUnit} key={`col-${i}`}>
<CharacterCard
key={i + Math.random()}
character={character}
cardSize={cardSize}
/>
</Col>
)
)
.reduce((rows, col, index) => {
let currentRow
if (index % rowSize === 0) {
currentRow = [];
rows.push(currentRow)
} else {
currentRow = rows[rows.length - 1]
}
currentRow.push(col)
return rows;
}, []
)
.map((cols, i) => <Row key={`row-${i}`}>{...cols}</Row>)
return (
<div>
<Container>
{cardLayout}
</Container>
</div>
)
}