【发布时间】:2020-04-02 16:29:52
【问题描述】:
我正在尝试使用 React.JS 和 Reactstrap 制作 Gallery 应用程序。我正在使用map() 函数来显示卡片中的每一件艺术品。在每张卡片中,都有一个按钮可以打开模式以显示来自地图功能的更多数据。我的问题是,当我单击按钮从任何卡片打开模式时,它会显示页面上最后一张卡片的数据。
代码:
const Artcards = ({ state, loading }, props) => {
const { buttonLabel, className } = props;
const [modal, setModal] = useState(false);
const toggle = () => setModal(!modal);
if (loading) {
return <h2>Loading</h2>;
}
return (
<CardGroup className="CardGroup">
{state.map((state, index) => {
return (
<div key={index}>
<Card className="Card" style={{ padding: "0", height: "39rem" }}>
<CardBody className="pt-3">
<CardTitle className="CardTitle">
Art Name:
<h6 className="CardParagraph">{state.artName}</h6>
</CardTitle>
<CardSubtitle>
Artist Name:
<h6 className="CardParagraph">{state.artistName}</h6>
</CardSubtitle>
<CardImg
top
src={state.source}
alt={state.artName}
/>
</CardBody>
<CardBody>
<CardText>
Description:
<div className="CardParagraph">{state.description}</div>
</CardText>
<CardText>
Price:<div className="CardParagraph">{state.price} </div>
</CardText>
<Button size="sm" color="danger" className=" m-1">
Buy
</Button>
<br></br>
<Button color="success" onClick={toggle}>
Contact Artist
</Button>
</CardBody>
<Modal
isOpen={modal}
state={state}
fade={false}
toggle={toggle}
className={className}
>
<ModalHeader className="bg-dark text-primary" toggle={toggle}>
here the {state.artistName} should be
</ModalHeader>
<ModalBody>
<p>Header:{state.artName}</p>
<textarea
style={{ overflow: "auto", resize: "none"}}
rows="5"
cols="60"
placeholder="Write your message"
></textarea>
<Input
type="text"
placeholder="Write Email or Tel number for response"
></Input>
</ModalBody>
<ModalFooter>
<Button color="primary" onClick={toggle}>
Send message
</Button>{" "}
<Button color="secondary" onClick={toggle}>
Cancel
</Button>
</ModalFooter>
</Modal>
</Card>
</div>
);
})}
</CardGroup>
);
};
【问题讨论】:
-
您正在为每张卡片创建一个模式。你不需要这样做。创建一个(例如,将其放在 CardGroup 下)并切换它。
标签: javascript reactjs modal-dialog reactstrap