Реагирует на отображение через несколько массивов объектов и компонентов отображения на сайте?

#arrays #reactjs

#массивы #reactjs

Вопрос:

Я пытаюсь создать компоненты карты и отобразить их через свой файл данных, чтобы отобразить их, что мне удалось сделать с одним файлом данных объекта массива. Но моя проблема возникает, если я хочу повторно использовать компонент card с новым файлом данных массива, я, похоже, не могу получить данные.

Итак, пример данных

  export const data1 = [
  {
   title: 'first',
   desc: 'first desc,
   img: 'image-1.jpg'
  },
  {
   title: 'second',
   desc: 'second desc,
   img: 'image-2.jpg'
  },
 ]
  

Итак, если у меня есть только один массив данных, я просто сопоставляю его следующим образом

  {data1.map((data, index) => {
  return (
 <Title>{data.title}</Title>
 <Desc>{data.desc}</Desc>
 <Img src={data.img} />
 )
 })
  

Тогда, если я хочу отобразить этот компонент карты, я бы просто добавил его на свою страницу

  <CardComponent />
  

Но теперь, если я хочу повторно использовать этот компонент и просто переключить данные, я не смогу правильно отобразить его, потому что он отображается только через массив data1.

Итак, если я создам еще один массив

  export const dataTwo = [
  {
   title: 'third',
   desc: 'third desc,
   img: 'image-3.jpg'
  },
  {
   title: 'fourth',
   desc: 'fourth desc,
   img: 'image-4.jpg'
  },
 ]
  

Теперь я не могу повторно использовать свой компонент, потому что map() нацелен только на data1.map, а не на dataTwo.map

Так что я не совсем уверен, как бы я создал по существу новый компонент Card

В идеале я бы хотел получить этот результат

  <Navbar />
 <CardComponent {...data1} />
 <MainSection>
 <CardComponent {...dataTwo} />
 <Footer />
  

Но проблема в том, что я отображаю значения вместо того, чтобы просто получать данные из обычного объекта, поэтому этот метод не работает.

Есть идеи, как я мог бы это реализовать?

Ответ №1:

Просто передайте массивы в качестве реквизита CardComponent , например, data реквизиту.

 <CardComponent data={data1} />
...
<CardComponent data={dataTwo} />
  

И сопоставьте переданный data реквизит CardComponent . Помните, что сопоставление должно возвращать все, заключенное в один узел (т. Е. div , Fragment , и т. Д.), И Должно иметь прикрепленный ключ реакции.

Пример

 const CardComponent = ({ data }) => {
  return (
    <>
      {data.map((data, index) => {
        return (
          <Fragment key={index}>
            <Title>{data.title}</Title>
            <Desc>{data.desc}</Desc>
            <Img src={data.img} />
          </Fragment>
        );
     })}
    </>
  );
};
  

Ответ №2:

Если у вас есть несколько массивов, которые вы хотите отобразить, вы можете объединить их в один при вызове компонента, например:

 <CardComponent data={data1.concat(dataTwo)} />
  
 props.data.map((item) => (
    <Title>{item.title}</Title>
    <Desc>{item.desc}</Desc>
    <Img src={item.img} />
))