У меня есть такой объект:
export const dataEstrenos = [
{
id: 1, product: "any product", title: "any title"
},
{
id: 2, product: "any product", title: "any title"
},
{
id: 3, product: "any product", title: "any title"
},
{
id: 4, product: "any product", title: "any title"
},
{
id: 5, product: "any product", title: "any title"
},
{
id: 6, product: "any product", title: "any title"
},
{
id: 7, product: "any product", title: "any title"
}
];
Я хочу отображать элементы группами по четыре элемента внутри контейнера div, например:
<div>
<div>Here data from first item</div>
<div>Here data from second item</div>
<div>Here data from third item</div>
<div>Here data from fourth item</div>
</div>
<div>
<div>Here data from fifth item</div>
<div>Here data from sixth item</div>
<div>Here data from seventh item</div>
</div>
... Элементов внутри объекта может быть любое количество, а последний контейнер div может не содержать четырех элементов в зависимости от того, сколько элементов осталось в массиве/объекте (как в примере выше).
Как я могу добиться этого в реакции? Я новичок в React, поэтому мои попытки добиться этого не стоят здесь. Спасибо!
Чтобы отобразить div группами по 4, вы можете использовать сетку CSS — пример



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Сначала я бы разделил массив на подмассивы. Если у вас есть любимая библиотека утилит, вероятно, в ней есть функция для этого, например фрагмент Lodash или SplitEvery Ramda. Или вы можете написать свой собственный.
const createChunks = (array, size) => {
const chunks = [];
for (let i = 0; i < array.length; i += size) {
chunks.push(array.slice(i, i + size));
}
return chunks
}
// In your component:
const chunks = createChunks(dataEstrenos, 4);
После этого сопоставьте массивы следующим образом:
return (
<>
{chunks.map((chunk, i) => (
<div key = {i}>
{chunk.map((item) => (
<div key = {item.id}>Here data from item. Eg, {item.title}</div>
))}
</div>
))}
</>
);
Использование библиотеки Lodash может обеспечить лучшую производительность в некоторых случаях форматирования данных.
Но если вы хотите написать ванильный код реагирования, вот предложение
function App() {
// Calculate the number of groups
const ARRAY_GROUPSIZE = 4;
// Create an array of group indices from 0 to numGroups-1
const groups = Array.from(
{ length: Math.ceil(dataEstrenos.length / ARRAY_GROUPSIZE) },
(_, i) => i * ARRAY_GROUPSIZE
);
// Map each group start index to a sub-array of dataEstrenos sliced from the start index with size of ARRAY_GROUPSIZE
const groupedData = groups.map((groupStartIndex) =>
dataEstrenos.slice(groupStartIndex, groupStartIndex + ARRAY_GROUPSIZE)
);
return (
<div>
{groupedData.map((group, index) => (
<div key = {index}>
{group.map((item) => (
<div key = {item.id}>
{item.title} - {item.product}
</div>
))}
</div>
))}
</div>
);
}
export default App;
Ух ты! Спасибо! Это сработало как чудо, я потратил три дня, пытаясь найти решение. Очевидно, мне нужно больше уроков по React!
Отвечает ли это на ваш вопрос? Как я могу изменить функцию array.map в реакции