【问题标题】:how to get selected item in an array from another functional component react如何从另一个功能组件中获取数组中的选定项目
【发布时间】:2021-11-04 08:43:00
【问题描述】:

我正在做一个 react - nextjs 项目。

我想做 当点击目的地卡片时,应该会打开一个模式,其中包含所选目的地的详细信息。

我不知道如何将所选目的地详细信息发送到此组件<DestinationInfo />

我试过了

DestinationCard.tsx

import { NextPage } from "next";
import styles from "./DestinationCard.module.scss";
import Image from "next/image";
import React, { useState } from "react";
import Button from "@material-ui/core/Button";
import DestinationInfo from '../destination-info/DestinationInfo';

const DestinationInCountry = [
  {
    imageSrc: "/images/offers/uk1.jpg",
    postTitle: "Lorem Ipsum",
    postDesc: "Lorem  Sit amet Lorem Ipsum Dolar Sit ametum Dolar Sit amet",
    destination: "London",
    price: "499",
    link: "/",
  },
  {
    imageSrc: "/images/offers/uk2.jpg",
    postTitle: "Lorem Ipsum",
    postDesc: "Lorem  Sit amet Lorem Ipsum Dolar Sit ametum Dolar Sit amet",
    destination: "London",
    price: "249",
    link: "/",
  },
];

const DestinationCard: NextPage = () => {
const [open, setOpen] = useState(false);

const openDestinationInfoCard = () =>{
  setOpen(true);
}

  return (
    <>
    {open ? (
      <DestinationInfo  DestinationInCountry= {DestinationInCountry}/>

    ) : ( <div id="destinationCard" className={styles.main_wrapper}>
      <div className={styles.destination_grid}>
        {DestinationInCountry.map((item, index) => {
          return (
            <div key={index} className={styles.country_card}
            onClick={() => openDestinationInfoCard()}
            >
              <div className={styles.post_wrapper}>
                <div className={styles.post_title}>{item.postTitle}</div>
                <div className={styles.post_desc}>{item.postDesc}</div>
                <Button>
                  <a> Read more  </a>
                </Button>
              </div>
              <div  className={styles.img_wrapper}>
              <Image
                src={item.imageSrc}
                alt="world pinoy flights - destinations"
                width={400}
                height={400}
              />
              </div>
            </div>
          );
        })}
      </div>

    </div>)}
   </>
  );

}

export default DestinationCard;

DestinationInfo.tsx

import Image from "next/image";
import styles from './DestionationInfo.module.scss';

export interface DestinationPlacesProps {
    DestinationInCountry;
}

const DestinationInfo: React.FC<DestinationPlacesProps> = (props) => {
    return(
        <>
        <div className={styles.card_wrapper}>
            <div>
            <Image
                src={props.DestinationInCountry.imageSrc}
                alt="world pinoy flights - destinations"
                width={400}
                height={400}
              />
            </div>
        </div>
        </>
    )
}

export default DestinationInfo;

我收到此错误。未处理的运行时错误 错误:图像缺少必需的“src”属性。确保将 props 中的“src”传递给 next/image 组件。收到:{"width":400,"height":400}

如何将 DestinationInCountry 中的选定项目发送到 DestinationInfo 这个组件

【问题讨论】:

  • 您好,您正在传递一个不包含 imageSrc 属性的数组。要完成这项工作,您应该使用 {props.DestinationInCountry[0].imageSrc} 而不是 {props.DestinationInCountry.imageSrc}。
  • @JamesLin 但是它为所有选定的目的地提供了相同的图像。我对每个目的地都有不同的图像。

标签: javascript reactjs react-props react-functional-component


【解决方案1】:

答案:

在 DestinationCard.tsx 中

&lt;DestinationInfo DestinationInCountry= {DestinationInCountry} selected= {selected}/&gt;

import Image from "next/image";
import styles from './DestionationInfo.module.scss';

export interface DestinationPlacesProps {
    DestinationInCountry;
    selected;
}

const DestinationInfo: React.FC<DestinationPlacesProps> = (props) => {
    return(
        <>
        <div className={styles.card_wrapper}>
            <div>
            <Image
                src={props.DestinationInCountry[props.selected].imageSrc}
                alt="world pinoy flights - destinations"
                width={400}
                height={400}
               
              />
            </div>
        </div>
        </>
    )
}

export default DestinationInfo;

【讨论】:

  • 请在您的回答中提供更多详细信息。正如目前所写的那样,很难理解您的解决方案。
【解决方案2】:

你正在传递一个数组。

const [selected, setSlected] = useState('')

//Add an handle for button

const handler = (id) => {
   setSelected(id)
   setOpen(true)
}

<DestinationInfo selected ={selected}/>

【讨论】:

  • 谢谢@mitsui
  • 如果解决了您的问题,请标记为已回答]
【解决方案3】:

DestinationInCountry 是一个数组。所以添加索引得到imageSrc

src={props.DestinationInCountry[0].imageSrc}

【讨论】:

  • 但它为所有选定的目的地提供相同的图像。每个目的地都有不同的图像
  • 使用地图渲染所有图像,如下面的代码
猜你喜欢
  • 2021-01-08
  • 1970-01-01
  • 2012-01-30
  • 2011-01-11
  • 2021-01-12
  • 1970-01-01
  • 2014-05-26
  • 2020-12-27
  • 2017-03-11
相关资源
最近更新 更多