javascript - 我的 onClick() 出现问题。更新数组中错误索引的数据?

标签 javascript reactjs onclick

您好,我有一个带有标题“患者信息”和位置的表格。在标题位置下,每行有 5 个按钮,按钮有 patentLocationSelect() onClick。第 5 个按钮与其他按钮不同,因为单击弹出窗口时该按钮会显示更多按钮。在弹出窗口上还有更多按钮,其中包含 patentLocationSelect() onClick

前 4 个按钮的 onClick 按预期工作。 patentLocationSelect() 接收被单击的 locationButton 的 id 和患者索引,然后在状态下更新数组中正确患者的位置。

问题

第 5 个按钮显示更多按钮,但是 patentLocationSelect() 始终选择数组中的最后一个患者。在这种情况下,它总是有男子气概,并且只更新他的位置。我不明白为什么。

 patientInfo: [
                {room: 1, name: 'John',  location: ''},
                {room: 2, name: 'Shawn', location: ''},
                {room: 3, name: 'Brave', location: ''},
                {room: 4, name: 'Macho', location: ''},
              ]
   patientLocationSelect = (e, data, index) => {

        const { id } = e.target;

        this.setState({
            patientInfo: this.state.patientInfo.map((patient, i) => {
                if (i=== index){
                    return {...patient, locationInfo: id};
                }
                return patient;
            })
        });
    }

  const popoverButtons = [
        "Dinning Room",
        "Garden",
        "Shower",
        "Activity Room",
        "Toilet", 
    ];


 locationButtons : ['Bed', 'Corridor', 'TV', 'Lounge'],


<tbody>
            {patientInfo.map((patient, index) =>
                <tr>
                    <td>{patient.room}</td>
                    <td>{patient.name}</td>
                    <td className="location-btns">
                        {locationButtons.map((location, i) =>
                            <Button
                                 key={i}
                                onClick={(e) => patientLocationSelect(e, patient, index)}
                                id={location}
                            >
                                {location}

                            </Button>
                        )}

                        <Button id="Other" onClick={showPopOver}>Other</Button>

                        <Overlay
                            show={show}
                            target={target}
                            placement="left"
                         >

                            <Popover id="popover-contained">

                                {
                                    popoverButtons.map((item, i)=> 
                                        <Button
                                            key={i}
                                            onClick={(e) => patientLocationSelect(e, patient, index)}
                                            id={item}
                                        >
                                            {item}
                                        </Button>
                                    )
                                }
                            </Popover>
                        </Overlay>

                    </td>

enter image description here

最佳答案

当您单击“其他”按钮时,就会呈现叠加组件,对吗?这意味着患者信息已完整呈现。这意味着病人信息上的 map 功能已经完成。因此它总是返回最后的患者信息。

要解决此问题,您可以在单击“其他”按钮时将患者信息保存在状态中,如下所示:

<Button
 id="Other"
 onClick={() => {
    this.setState({ activePatient: patient, activeIndex: index });
    showPopOver();
 }}
>
    Other
</Button>

然后单击 Popover 按钮,执行以下操作:

onClick={(e) => patientLocationSelect(e, this.state.activePatient, this.state.activeIndex)}

希望这能解决您的问题

关于javascript - 我的 onClick() 出现问题。更新数组中错误索引的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57254976/

相关文章:

javascript - Sails.js Controller 等待异步服务方法

javascript - 如何显示加载程序直到显示图像?

javascript - 如何在深度未知的数组内递归构建子数组的路径

javascript - 如何在react中不添加url的情况下导航到特定路线

javascript - JS 中的质因数分解重复

reactjs - React 嵌套路由刷新时无法加载

javascript - React 从子级 -> 父级 -> 另一个子级传递数据

javascript - onClick后如何不刷新页面

javascript - 标题内的 div/靠近页面顶部/在 2 次单击事件后不显示,而它的页脚双胞胎工作 - jquery

javascript - onClick 不会触发,chrome/safari