我有一个数据列表,更改后有一个函数,该函数检查从选项中选取的值或键入新值。取决于我将其分配给变量“ address_id”或“ new_address”。最后,我需要制作对象并将其存储在状态中。问题是我只需要放置一个不为null的值。
如果address_id为null,则in对象应为new_address。如果new_address为null,则在对象address_id中。
address_id=null
tempObj: {
new_address: new_address,
},
如何进行验证,检查哪些变量不为null并将其放入对象。
onChooseAddress(e, idx) {
const { adresses } = this.state
let address_id = null
let new_address = null
for (let i = 0; i < adresses.length; i++) {
if (
e.target.value === adresses[i].address &&
e.target.name === "address"
) {
address_id = adresses[i].id
}
}
if (!address_id && e.target.name === "address") {
new_address = e.target.value
}
// Here I need make validation!!!
this.setState(prevState => ({
tempObj: {
...prevState.tempObj,
// address_id: address_id or new_address: new_address,
},
}))
}
答案 0 :(得分:0)
您可以执行返回状态对象的普通函数。
this.setState(prevState => {
// do validations here
return {
tempObj: {
...prevState.tempObj,
// address_id: address_id or new_address: new_address,
};
});
答案 1 :(得分:0)
像这样吗?
let existingaddr = addresses.find( (address) => e.target.value ===
address.address && e.target.name === 'address' )
let tmpObj = {
...prevState.tempObj
}
if( existingaddr ){
tmpObj.address_id = existingaddr.id;
}
else{
tmpObj.new_address = e.target.value
}
this.setState(prevState => (tmpObj))
我没有测试它,但是这个想法是创建一个对象,该对象将具有一个键或另一个键,然后传播到您的临时对象中。希望我能理解您要完成的任务。
编辑: 我做了一些改动,并将其放在code pen中。据我所知,它遵循您的用例。