Проскальзывание для отображения извлеченных данных из Api на карту с помощью функции map() в react.js

#javascript #node.js #reactjs

Вопрос:

Я учусь и пытаюсь создать веб-сайт с помощью интерфейса react.js и бэкэнд node.js.Я создал Api, используя node.js и хотите отобразить данные в карточке.Хотя данные получены,но изображение не отображается,и все данные(все изображение, имя, цена) отображаются на одной карточке.как это решить?


<Ползунок {…настройки}> {

     products.map((popularObject, i) => (
      <li key={popularObject._id}>
        <div className="card-wrapper">

          <ul className="product">
            <div className="card">
              <Link to={'/product/'   popularObject._id}>
                <img className="card-image" src={
                  (typeof (popularObject.popular) == 'object') ?
                    <div>
                      {
                        popularObject.popular.map((subpopularObject, index) => {
                          <div key={index}>
                            {subpopularObject.imageUrl}
                          </div>
                        }
                        )
                      }
                    </div>
                    :
                    null
                } alt="popular" />
              </Link>

              <div className="details">
                <div className="job-title">
                  <h4><p className="tag">Radhunir Rannaghor</p><Link to={'/product/'   popularObject._id}>
                    {
                      (typeof (popularObject.popular) == 'object') ?
                        <div>
                          {
                            popularObject.popular.map((subpopularobj,index) =>

                              <div key={index}>{subpopularobj.name}</div>
                            )
                          }
                        </div>
                        :
                        null
                    }

                  </Link><span className="job-title"></span> </h4>
                </div>
                <div className="job-title-price"> <h4> ${popularObject.popular[i].price}</h4></div>

              </div>

            </div>
          </ul>
        </div>
      </li>

    ))}
</Slider>
 
    
// here is data.js

  {
    products: [
      {
        popular: [
          {
            _id: '1',
            name: 'Nasi Goreng',
            imageUrl: 'imagestest/3.jpg',
            rating: '5.0',
            deliveryTime: '45 mins',
            deliveryCharges: 'Free Delivery',
            price: '150',
            note: 'Extra special'
          },
          {
            _id: '2',
            name: 'Rendang',
            imageUrl: 'imagestest/7.jpg',
            rating: '4.9',
            deliveryTime: '35 mins',
            deliveryCharges: 'Free Delivery',
            price: '250',
            note: 'Special'
          },
          {
            _id: '3',
            name: 'Nasi Padang',
            imageUrl: 'imagestest/16.jpg',
            rating: '4.5',
            deliveryTime: '55 mins',
            deliveryCharges: 'Delivery charges 50 extra',
            price: '199',
            note: 'Chilly'
          },
          {
            _id: '7',
            name: 'Pece',
            imageUrl: 'imagestest/13.jpg',
            rating: '4.0',
            deliveryTime: '75 mins',
            deliveryCharges: 'Free Delivery',
            price: '150',
            note: 'Special, Spicy'
          },
          {
            _id: '4',
            name: 'Indomie',
            imageUrl: 'imagestest/13.jpg',
            rating: '3.8',
            deliveryTime: '25 mins',
            deliveryCharges: 'Free Delivery',
            price: '150',
            note: 'Special, Spicy'
          }
        ],
        recommended: [
          {
            _id: '2',
            name: 'Rendang',
            imageUrl: 'imagestest/7.jpg',
            rating: '4.9',
            deliveryTime: '35 mins',
            deliveryCharges: 'Free Delivery',
            price: '250',
            note: 'Special'
          },
          {
            _id: '1',
            name: 'Nasi Goreng',
            imageUrl: 'imagestest/3.jpg',
            rating: '5.0',
            deliveryTime: '45 mins',
            deliveryCharges: 'Free Delivery',
            price: '150',
            note: 'Extra special'
          },
          {
            _id: '7',
            name: 'Pece',
            imageUrl: 'imagestest/13.jpg',
            rating: '4.0',
            deliveryTime: '75 mins',
            deliveryCharges: 'Free Delivery',
            price: '150',
            note: 'Special, Spicy'
          }
        ],
        allmenu: [
          {
            _id: '1',
            name: 'Nasi Goreng',
            imageUrl: 'imagestest/3.jpg',
            rating: '5.0',
            deliveryTime: '45 mins',
            deliveryCharges: 'Free Delivery',
            price: '150',
            note: 'Extra special'
          },
          {
            _id: '2',
            name: 'Rendang',
            imageUrl: 'imagestest/4.jpg',
            rating: '4.9',
            deliveryTime: '35 mins',
            deliveryCharges: 'Free Delivery',
            price: '250',
            note: 'Special'
          },
          {
            _id: '3',
            name: 'Nasi Padang',
            imageUrl: 'imagestest/6.jpg',
            rating: '4.5',
            deliveryTime: '55 mins',
            deliveryCharges: 'Delivery charges 50 extra',
            price: '199',
            note: 'Chilly'
          },
          {
            _id: '4',
            name: 'Indomie',
            imageUrl: 'imagestest/12.jpg',
            rating: '3.8',
            deliveryTime: '25 mins',
            deliveryCharges: 'Free Delivery',
            price: '150',
            note: 'Special, Spicy'
          },
          {
            _id: '5',
            name: 'Rendang',
            imageUrl: 'imagestest/6.jpg',
            rating: '4.9',
            deliveryTime: '35 mins',
            deliveryCharges: 'Free Delivery',
            price: '250',
            note: 'Special'
          },
          {
            _id: '6',
            name: "Nasi Goreng",
            imageUrl: 'imagestest/7.jpg',
            rating: '5.0',
            deliveryTime: '45 mins',
            deliveryCharges: 'Free Delivery',
            price: '250',
            note: ''
          },
          {
            _id: '7',
            name: 'Pece',
            imageUrl: 'imagestest/1.jpg',
            rating: '4.0',
            deliveryTime: '75 mins',
            deliveryCharges: 'Free Delivery',
            price: '150',
            note: 'Special, Spicy'
          }
        ]
      }
    ]
    } 

///вывод

введите описание изображения здесь

введите описание изображения здесь

Комментарии:

1. не могли бы вы добавить рабочий образец с помощью codesandbox l?

Ответ №1:

Насколько я понимаю, вы хотите отобразить 1 карту на популярный продукт.

Таким образом, это означает, что первый map должен быть включен products.popular , а не просто products :

 <Slider {...settings}> {

    products.popular.map((popularObject, i) => (
      <li key={popularObject._id}>
      // …
      </li>
    ))

}
</Slider>
 

Сделав это изменение, вы подразумеваете, что все внутренние map данные, которые вы используете для каждой отдельной части карты, больше не существуют, так как у вас уже есть popularObject область действия со всеми необходимыми значениями.