我正在MERN项目中工作,我想在按钮点击时存储PM_id
,并将PM_id
存储在useState中,稍后我想从useState中获取PM_id
。
- 我试过这个solution,但它不适合我**
- 我的密码**
import React, { useEffect, useState } from 'react'
const [storeid,setstoreid] = useState([])
const getmemberidatte = (PM_id)=>{
setstoreid(...storeid,[PM_id])
console.log(storeid[0]?.PM_id);
}
return (
<>
<ol class="list-group list-group-numbered mt-4 ">
{
smember.map((item, i) => (
<li class="list-group-item d-flex justify-content-between align-items-start">
<div class="ms-2 me-auto">
<NavLink onClick={() => { getmemberid(item.PM_id) }} className="text-decoration-none"><div class="fw-bold">{item.member}</div></NavLink>
</div>
<button onClick={()=>{ getmemberidatte(item.PM_id)}} className='btn btn-success me-3'>P</button>
<button className='btn btn-danger '>A</button>
</li>
))
}
</ol>
</>
)
}
export default Contractor
- 在控制台中,我得到
undefined
。代码的主要部分是<button onClick={()=>{ getmemberidatte(item.PM_id);takeattendanceonbutton()}} className='btn btn-success me-3'>P</button>
**
- 在控制台中,我得到
- 请建议我如何获取ID?**
1条答案
按热度按时间piztneat1#
你的代码中有几个问题。首先,你设置了错误的状态。设置数组状态的正确方法是:
或者更一般地说:
另外,您在调用
setstoreid
之后立即调用console.log
,这意味着在您尝试调用它之前,状态没有时间更新,因此显示的值总是落后一个。您可以使用useEffect
并将storeid
作为依赖项来解决此问题。这样
console.log
将只在storeid
更新后运行。现在,由于您的函数所做的只是调用setstoreid
,因此您可以跳过一个步骤并删除函数,这意味着您的按钮将是: