ค้นหาเว็บไซต์

reactjs - REACT การส่งอาร์เรย์ไปยังคอมโพเนนต์ลูก


ฉันกำลังพยายามเรียนรู้ React กับ TypeScript และไม่แน่ใจว่าทำไมฉันถึงได้รับข้อผิดพลาดนี้

ฉันมีแอปบัตรของฉัน:

public state = {
    cards: []
};


public render() {
    return (
        <div>
            <Form onSubmit={this.addNewCard}/>
            <CardList cards={this.state.cards}/>
        </div>
    );
}

รายการบัตรคือ:

const CardList = (props: ICard[]) => {
    return (
        <div>            
            { props.map((card: ICard) => <Card key={card.id} {...card} />) }   
        </div>
    )
}

ด้วยสิ่งนี้ฉันได้รับข้อผิดพลาด Type '{ cards: never[]; }' ไม่สามารถกำหนดค่าให้กับประเภท 'IntrinsicAttributes & ICard[]' ได้ Type '{ cards: never[]; }' ไม่สามารถกำหนดค่าให้กับประเภท 'ICard[]' ได้ Property 'length' ขาดหายในประเภท '{ cards: never[]; }'.

อย่างไรก็ตาม ถ้าฉันสร้างอินเทอร์เฟซ ICards:

interface ICards {
    cards: ICard[]
}

และใช้สิ่งนั้น จากนั้น รายการบัตรคือ:

const CardList = (props: ICards) => {
    return (
        <div>            
            { props.cards.map((card: ICard) => <Card key={card.id} {...card} />) }
        </div>
    )
}

สิ่งนี้ทำงานได้ดี แต่ฉันมีความเข้าใจว่า <CardList cards={this.state.cards}/> กำลังส่งผ่านอาเรย์ และไม่ได้เป็นอ็อบเจ็กต์ที่มีคุณสมบัติเป็นอาเรย์ ดังนั้นอินเทอร์เฟซ ICards จึงไม่จำเป็น

คำตอบ #1

วัตถุ props ไม่ใช่อาร์เรย์ cards แต่คีย์ cards ในวัตถุ props นั้นใช่

คุณสามารถเขียนมันแบบนี้ได้:

const CardList = (props: { cards: ICard[] }) => {
  return (
    <div>{props.map((card: ICard) => <Card key={card.id} {...card} />)}</div>
  );
};