javascript - 映射的嵌套组件无法正常工作(React Js)
问题描述
我有一个映射到要显示在我的“allItems”页面上的项目列表。现在每个 Item 都有一个按钮,可以启动一个带有该项目规格的模式,但是这个模式为所有项目(数组中的最后一个)显示相同的值。我试图在切换函数中传递 id,但它不起作用。
任何人都知道如何在卡片和模态中显示相同的数据?
这是我的代码:
state = {
modal: false,
}
toggle = () => {
this.setState({
modal: !this.state.modal
})
}
render(){
return(
{rooms.map(({ _id, name, descr, prezzo }) => (
<>
<Card key={_id} className="rooms-card-template">
<CardImg />
<CardBody>
<CardTitle>{name}</CardTitle>
<CardText>{descr}</CardText>
<CardSubtitle>{prezzo}$/notte</CardSubtitle>
<Button onClick={this.toggle}>Apri Annuncio</Button>
<Modal isOpen={this.state.modal} toggle={this.toggle}>
<ModalHeader >{name}</ModalHeader>
<ModalBody>
{descr}
<h5 style={{ paddingTop: "10px"}}>Riepilogo prenotazione</h5>
<Form>
<FormGroup>
<Label>Struttura:</Label>
<Input value={name}/>
</FormGroup>
<FormGroup>
<Label>Ospiti:</Label>
<Input type="select"name="ospiti" id="ospiti">
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
<option>7</option>
<option>8</option>
<option>9</option>
</Input>
</FormGroup>
<FormGroup>
<Label>Check in</Label>
<Input type="date" name="checkin-date" id="checkin-date" placeholder="Check in" />
</FormGroup>
<FormGroup className="rooms-checkout">
<Label>Check out</Label>
<Input type="date" name="checkout-date" id="checkout-date" placeholder="Check out" />
</FormGroup>
{ isAuth ? userAuth : userUnauth }
</Form>
</ModalBody>
</Modal>
</CardBody>
</Card>
</>
))}
)
}
解决方案
问题
您有一个布尔modal
状态,所有模态都从中提示。当this.state.modal
为 true 时,将为每个被映射的元素呈现和打开一个模式。
解决方案
与其存储一个是否应该打开模态的布尔值,不如存储一个id
当您希望打开特定模态时的值。
state = {
modal: null // <-- null, non-id state value
};
toggle = (id) => () => { // <-- curried function handler
this.setState((prevState) => ({
modal: prevState.modal === id ? null : id // <-- set new id or toggle off
}));
};
render() {
return (
<>
{rooms.map(({ _id, name, descr, prezzo }) => (
<Card key={_id} className="rooms-card-template">
...
<CardBody>
...
<Button
onClick={this.toggle(_id)} // <-- pass id
>
Apri Annuncio
</Button>
<Modal
isOpen={this.state.modal === _id} // <-- open if id is match
toggle={this.toggle(_id)} // <-- pass id
>
...
</Modal>
</CardBody>
</Card>
))}
</>
);
}
推荐阅读
- jquery - KendoUI 双标头和过滤器
- django - 如何获取已排队但尚未开始的芹菜任务列表
- php - 无法通过 API 从电子表格中获取上传的图像?
- python - 如何在 Dart 中打印字符串的特定部分?
- authentication - TYPO3 v10.4 后台登录认证错误
- api - 如何在 api getway 中处理无效请求或无效 url
- javascript - PHP / 连接到后端失败,发送请求时 CONNECTION_RESET
- python - 删除具有特定扩展名的文件,该文件位于文本文件中的列表中
- python - 为什么 Tensorflow-gpu 只给对象预测一次
- reactjs - Facebook 的 OG 抓取工具使用的图片与我的 OG 标签中的图片不同