微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript反应从地图中的值设置状态

如何解决javascript反应从地图中的值设置状态

const[deleteId,setDeleteId] = useState();

const PatientDeleteVarifiToggle = e =>{
    setDeleteId(e.target.value)//<<<<<--------------------------------THIS
    setDeleteState(true)
}

return (
    <div>
        <table>
            <thead>
                <tr>
                    <th>Name</th>
                    <th>Doctor</th>
                    <th>Emergancy Contact</th>
                    <th>Action</th>
                </tr>
            </thead>
            <tbody>
                {
                    allPatients.map((patient,i)=>{
                        return(
                            <tr>
                                <td key={i}>{patient.firstName} {patient.lastName}</td>
                                <td key={i}>{patient.doctor}</td>
                                <td key={i}>{patient.emergancyContact}</td>
                                <td><Link to={`/patientDetails/${patient._id}`}>Details</Link> | 
                                <p key={i} value={patient._id} onClick={PatientDeleteVarifiToggle}>Remove</p></td> //<<<<<<------------------------THIS
                            </tr>
                        )
                    })
                }
            </tbody>
        </table>

我需要将 deleteId 状态分配给我正在映射的患者的 ID。我知道 patient._id 包含我想要的 id,因为我通过在 p 标签显示它进行了测试

解决方法

您无法使用 e.target.value 访问 p 标记的 value 属性,如果您需要该值,您可以使用 getAttribute

但我建议将该值作为参数传递给 PatientDeleteVarifiToggle 函数。

我删除了 p 标记上的 value 属性,并使用内联箭头函数将其作为参数传递。

<p key={i} onClick={() => PatientDeleteVarifiToggle(patient._id)}>
  Remove
</p>

我还稍微修改了 PatientDeleteVarifiToggle 函数。

const PatientDeleteVarifiToggle = (val) => {
    setDeleteId(val);
    setDeleteState(true); //<<<<<--------------------------------THIS
}
,

<p key={i} value={patient._id} onClick={PatientDeleteVarifiToggle}>Remove</p>

您将值作为 p 标记的属性传递。所以你必须使用 getAttribute("YOUR ATTR NAME") 来访问值

你在做什么

const PatientDeleteVarifiToggle = e =>{
    setDeleteId(e.target.value)
    setDeleteState(true)
}

此处 e.target.value 返回 undefined,因此您的状态设置不正确

如果你想做你正在做的事情

const PatientDeleteVarifiToggle = e =>{
    setDeleteId(e.target.getAttribute("value"))
    setDeleteState(true)
}

常见且简单的方法是 因为您可以访问地图函数内的 patient._id。你可以像这样设置状态..

<p key={i} value={patient._id} onClick={() => {
    setDeleteId(patient._id);
    setDeleteState(true);
}}>Remove</p>
,

对于 onClick 事件,value 属性不起作用,它将是未定义的,但您可以改用 id 属性。

const PatientDeleteVarifiToggle = e =>{
  setDeleteId(e.target.id);
  setDeleteState(true);
}

...

<p id={patient._id} onClick={PatientDeleteVarifiToggle}>Remove</p>

此外,对于映射,React 键应位于最外层返回元素上,在本例中为 tr,并且由于您似乎正在改变底层数据数组,因此使用数组索引将导致对于和解/呈现问题,请改用患者 id,因为它们在数据集中可能是唯一的并且是稳定的(它们与所识别的数据保持一致)。

{allPatients.map((patient) => {
   return (
     <tr key={patient._id}>
       <td>{patient.firstName} {patient.lastName}</td>
       <td>{patient.doctor}</td>
       <td>{patient.emergancyContact}</td>
       <td>
         <Link to={`/patientDetails/${patient._id}`}>Details</Link> | 
         <p id={patient._id} onClick={PatientDeleteVarifiToggle}>Remove</p>
       </td>
     </tr>
   )
 })}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。