如何在setState中进行验证?

时间:2019-04-30 13:43:42

标签: javascript

我有一个数据列表,更改后有一个函数,该函数检查从选项中选取的值或键入新值。取决于我将其分配给变量“ 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,
      },
    }))
  }

2 个答案:

答案 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中。据我所知,它遵循您的用例。