Создавайте новый ul после каждых двух элементов с помощью React

#javascript #reactjs #list

#javascript #reactjs #Список

Вопрос:

Я создаю веб-сайт для заказа еды. На главной странице я получаю все изображения продуктов питания из своей базы данных, а затем, как вы видите в приведенном ниже коде, я использую docs.map для отображения всех изображений. Проблема в том, что я хочу иметь максимум два изображения внутри тега ul, но прямо сейчас все изображения помещаются в один ul. Итак, если бы было 6 изображений, также было бы 3 ul.

 <div className="cards__wrapper">
          <ul className="cards__items">
            {docs amp;amp;
              docs.map((doc) => (
                <CardItem
                  src={doc.url}
                  key={doc.id}
                  text={doc.imageText}
                  price={doc.price}
                  id={doc.id}
                ></CardItem>
              ))}
          </ul>
        </div>

 

Ответ №1:

Вы можете разбить массив на требуемые фрагменты и отобразить данные на основе этого. Я привел пример для этого. вы можете проверить это

Функция разделения

  var chunks = function (array, size = 2) {
    var results = [];
    while (array.length) {
      results.push(array.splice(0, size));
    }
    return results;
  };

 const data = chunks(lists, 2);
 

Визуализация :

    {data.map((childs, index) => {
        return (
          <ul>
            {childs.map((c, cindex) => {
              return <li>{c   index   cindex}</li>;
            })}
          </ul>
        );
      })}
 

Ответ №2:

   const docs = [1, 2, 3, 4, 5, 6, 7];
  const ulArr = [];

  docs.forEach((item, i, arr) => {
    if (i % 2 !== 0) {
      ulArr.push([arr[i - 1], item]); //add 2 elements ib Array
    }

    if (i == arr.length - 1) {
      ulArr.push([item]) //add last element in last array
    }
  })
 

Вам нужно пройти через ulArr через карту и вернуть одну карту с элементами LI