ReactJS从地图上唯一选择一个元素

埃德梅默托

我正在做一个Todo应用来练习React。我遇到了障碍,现在我想弄清楚如何唯一地编辑卡片。

目前,当我单击“编辑”时,我所有的卡片都设置为isEditing == true我尝试添加密钥和索引,但是似乎不能唯一地标识所选的卡。

如我的gif所示:

在此处输入图片说明

显然,预期结果是仅应将其设置isEditing == true为所选卡。

请参阅下面的代码。

对于更多的上下文: 有是传递道具此组件中,我使用状态组件react-bootstrap(因此PanelButton)和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>
        )
    }  
R代码。

所有这三个都基于您的单个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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章