【发布时间】:2021-03-15 04:10:22
【问题描述】:
我有简单的字段。我想根据从 axios 响应中获得的数据填充输入框。见下图
我正在使用钩子将数据保存到状态。 我的问题是如何在单击获取详细信息按钮(来自 api 的响应)时填充输入框。
见下面的代码
const [data, setData] = useState([])
const [advisoryDetails, setadvisoryDetails] = useState({
ADVISORYID: '',
ADVISORYDESC: '',
CREATEDBY:'',
MODIFIEDBY:'',
STATUS1: ''
})
const [advisoryDetails1, setadvisoryDetails1] = useState([])
const [advisoryID, setadvisoryID] = useState('')
const getAdvisoryTest = async () => {
await axios.post('/API',advisoryID)
.then(response => {
console.log(response.data)
setData(response.data)
console.log('data',data)
setadvisoryDetails1(response.data)
console.log('advisoryDetails1',advisoryDetails1)
alert('success')
})
advisoryDetails1.map(adv => {
advisoryDetails.ADVISORYID = adv.ADVISORYID;
advisoryDetails.ADVISORYDESC = adv.ADVISORYDESC;
advisoryDetails.CREATEDBY = adv.CREATEDBY;
advisoryDetails.MODIFIEDBY = adv.MODIFIEDBY;
if(adv.CREATEDBY && adv.MODIFIEDBY != '')
{
advisoryDetails.STATUS1 = 'Modified'
}
else{ advisoryDetails.STATUS1 = 'New'}
console.log('populate',advisoryDetails)
})
}
const txtAdvIdOnChange = e =>{
setadvisoryID(prevState =>({
...prevState,
'ADVISORYID':e.target.value
}));
console.log('onChange ID:',advisoryID)
}
return(
<div>
<label>AdvisoryID: </label>
<input type='text' placeholder='Advisory ID' className='txtAdvisoryID' onChange={txtAdvIdOnChange} />
<button onClick={()=>getAdvisoryTest()}>Get Details</button>
<br /><br />
<label>Advisory Desc: </label>
<input type='text' placeholder='textbox1' className='txtAdvisoryDesc' value={advisoryDetails&&advisoryDetails.ADVISORYDESC} disabled/>
<br/>
<label>New / Modified: </label>
<input type='text' placeholder='textbox2' className='txtStatus' value={advisoryDetails&&advisoryDetails.STATUS1} disabled/>
</div>)
即使在 console.log 中,也没有填充这些代码输入框 希望你能帮我谢谢。
【问题讨论】:
-
你为什么有
advisoryDetails.STATUS1 = 'Modified'?使用setadvisoryDetails更新状态,如下所示:setadvisoryDetails(prevState => ({...prevState, STATUS1: "Modified"})) -
而且您知道,由于您正在遍历数组
advisoryDetails1,它只是将数据覆盖到advisoryDetails,您将看到最后一次迭代的值 -
@HaseebA 哦,是的,呵呵,我的错。但是我在点击获取详细信息按钮时仍然无法填充输入框
-
如果您将
response.data设置为advisoryDetails1为什么不使用响应的数据来更新它,因为它可能的advisoryDetails1那时还没有更新。 ``` const respData = response.data; if (respData.length > 0) { const adv = respData[respData.length-1]; setadvisoryDetails((prevState) => ({ ...prevState, ...adv, STATUS1: adv.CREATEDBY && adv.MODIFIEDBY != '' ? 'Modified' : 'New' })) } ``` -
嗨@HaseebA,您可以发布您的答案以便我将其标记为正确答案吗?谢谢
标签: javascript reactjs