на основе значения ключа объекта массива необходимо установить состояние

#javascript #reactjs

#javascript #reactjs

Вопрос:

У меня есть поля ошибок реакции, которые я буду отображать на экране.

 this.state = {
    errorMerchantid: '',
    errorPassword: '',
    errorRePassword: '' 
}
 

поля ошибок будут динамическими. это может быть как показано ниже

 err.response.data={
    merchantID: 'merchant id error'
}
 

в приведенном выше случае у меня есть одна ошибка поля, которая является MerchantId, тогда мне нужно установить значение state, как показано ниже.

 this.setState ({errorMerchantid: err.response.data.merchantID })
 

или

 err.response.data={
    merchantID: 'merchant id error',
    password: 'invalid password'
}
 

в приведенном выше случае у меня ошибка в 2 полях: идентификатор продавца и пароль, затем мне нужно установить значение state, как показано ниже

  this.setState ({errorMerchantid: err.response.data.merchantID, 
                 errorPassword: err.response.data.errorPassword})
 

или

 err.response.data={
    merchantID: 'merchant id error',
    password: 'invalid password',
    repassword: 'invalid re-entered password'
}
 

в приведенном выше случае у меня ошибка в 3 полях: MerchantId, password и repassword, затем мне нужно установить значение state, как показано ниже.

  this.setState ({errorMerchantid: err.response.data.merchantID, 
                  errorPassword: err.response.data.errorPassword, 
                  repassword: err.response.data.repassword  })
 

Комментарии:

1. какой код вы написали до сих пор? можете ли вы это показать?

2. const errorResponseFields = Object.keys(err.response.data) const formFields = [‘MerchantId’, ‘password’, ‘repassword’] const errorFeilds = errorResponseFields.every((поля) => { //formFields.includes(поля) запутался здесь, как достичь })

3. вы могли бы просто использовать то же имя для состояния ошибки и просто сделать «this.setState(err.response.data)

Ответ №1:

Вы можете создать объект с обновлениями состояния и заполнить его условно

 // err.response.data
const {merchantID,password,repassword} = err.response.data;
const errors = {};

if (merchantID){
  errors.errorMerchantid = merchantID;
}
if (password){
  errors.errorPassword = password;
}
if (merchantID){
  errors.errorRePassword = repassword;
}

this.setState(errors); 


Если вам нужно каждый раз сбрасывать другие ошибки, вы могли бы сделать

 // err.response.data
const {merchantID,password,repassword} = err.response.data;
const errors = {
  errorMerchandId: merchantID || '',
  errorPassword: password || '',
  errorRePassword: repassword || ''
};


this.setState(errors); 

Имейте в виду, что вы должны соответствовать регистру свойств состояния, если они чувствительны к регистру.