Преобразовать список массивов внутри объекта в элементы div, содержащие до четырех элементов в React

У меня есть такой объект:

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, поэтому мои попытки добиться этого не стоят здесь. Спасибо!

Отвечает ли это на ваш вопрос? Как я могу изменить функцию array.map в реакции

Sergey Sosunov 29.04.2024 04:06

Чтобы отобразить div группами по 4, вы можете использовать сетку CSS — пример

Sai Yerni Akhil 29.04.2024 04:21
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
50
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Сначала я бы разделил массив на подмассивы. Если у вас есть любимая библиотека утилит, вероятно, в ней есть функция для этого, например фрагмент 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!

Fabricio Bisso 29.04.2024 05:25

Другие вопросы по теме