我正在做一个Todo应用来练习React。我遇到了障碍,现在我想弄清楚如何唯一地编辑卡片。
目前,当我单击“编辑”时,我所有的卡片都设置为isEditing == true
。我尝试添加密钥和索引,但是似乎不能唯一地标识所选的卡。
如我的gif所示:
显然,预期结果是仅应将其设置isEditing == true
为所选卡。
请参阅下面的代码。
对于更多的上下文: 有是传递道具此组件中,我使用状态组件react-bootstrap
(因此Panel
,Button
)和I去除一些码为简洁起见(construct
和诸如此类的东西)。
edit() {
this.setState({
isEditing: true
})
}
renderEditDoneButtons() {
return (
<div>
<Button onClick={this.edit}>edit</Button>
</div>
)
}
renderNote(note) {
return (
<p> {note} </p>
)
}
renderCard(note, i) {
return (
<Panel key={i}
index={i}>
{
this.state.isEditing ?
this.renderForm() :
this.renderNote(note.note)
}
</Panel>
)
}
render() {
return (
<div>
{this.props.notes.map(this.renderCard)}
</div>
)
}
所有这三个都基于您的单个isEditing
状态而变化,这就是为什么当您单击任何“编辑”按钮时看到所有三个都显示出来的原因。而不是使用单个isEditing
键进入状态,而是使用数组来维护所有三个状态,如下所示:
constructor(props) {
super(props);
// Sets a true/false editing state for all three panels
this.state = {
editingPanels: Array(3).fill(false)
}
}
edit(i) {
// Switches editing state to false/true for given i
const editingPanels = this.state.editingPanels.slice();
editingPanels[i] = !editingPanels[i];
this.setState({
editingPanels: editingPanels
})
}
renderEditDoneButtons(i) {
return (
<div>
<Button onClick={()=>this.state.edit(i)}>edit</Button>
</div>
)
}
renderNote(note) {
return (
<p> {note} </p>
)
}
renderCard(note, i) {
return (
<Panel key={i}
index={i}>
{
this.state.editingPanels[i] ?
this.renderForm() :
this.renderNote(note.note)
}
</Panel>
)
}
render() {
return (
<div>
{this.props.notes.map(this.renderCard)}
</div>
)
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句