Javascript 在遍历数组时从状态访问值时出现问题
我正在尝试遍历数组并执行一些操作。但是我无法访问我想要的值Javascript 在遍历数组时从状态访问值时出现问题,javascript,reactjs,Javascript,Reactjs,我正在尝试遍历数组并执行一些操作。但是我无法访问我想要的值 inputObj.map(el => { const msg = this.state.validation[el.id].message; const msg2 = this.state.validation['name'].message; }) 在这里,el.id可以是name、dob或address。当我使用this.state.validation[el.id].message时,它显示类型错误:无法读
inputObj.map(el => {
const msg = this.state.validation[el.id].message;
const msg2 = this.state.validation['name'].message;
})
在这里,el.id
可以是name
、dob
或address
。当我使用this.state.validation[el.id].message时代码>,它显示类型错误:无法读取未定义的属性“message”
。但是如果我硬编码它,比如this.state.validation['name'].message代码>,工作正常。当比较el.id
和'name'
时,它们具有相同的数据类型和值。那么,为什么在使用el.id
而不是硬编码时会出现问题呢
注意:我正在使用reactjs
编辑:
该州:
this.state = {
super(props);
this.validator = new FormValidator([
{
field: 'name',
method: 'isEmpty',
validWhen: false,
message: 'Name is required'
},
...
]);
orderForm: {
name: {
elementType: 'input',
elementConfig: ''
},
...
}
validation: this.validator.setValid() // it will be the updated upon submitting form on submitHandler by calling validate() from FormValidator
}
inputObj:
const inputObj= [];
for(let key in this.state.orderForm){
inputObj.push({
id : key,
config: this.state.orderForm[key]
});
}
FormValidator
import validator from 'validator';
class FormValidator {
constructor(rules){
this.rules = rules;
}
setValid(){
const validation = {};
this.rules.map(rule => (
validation[rule.field] = {isValid: true, message: ''}
));
return {isValid: true, ...validation};
}
validate(form){
let validation = this.setValid();
this.rules.forEach( rule => {
if (validation[rule.field].isValid){
const field = form[rule.field].toString();
const args = rule.args || [];
const validationMethod = typeof rule.method === 'string' ?
validator[rule.method] : rule.method;
if (validationMethod(field, ...args, form) !== rule.validWhen){
validation[rule.field] = {isValid: false, message: rule.message};
validation.isValid = false;
}
}
});
return validation;
}
}
export default FormValidator;
您可以在获取消息
键之前检查是否定义了此.state.validation[el.id]
这样你就不会犯致命的错误
inputObj.map(el => {
this.state.validation[el.id] && (
const msg = this.state.validation[el.id].message
);
})
你能展示一下这个.state.validation的外观吗?和inputObj
too如果这有效this.state.validation['name'].message
,el.id
不等于“name”
请尝试放置console.log
以将el.id
的值显示在map
中。我通过console.log检查了它,并比较了它们。我用if-else检查了它们的类型和值,发现它们的类型和值相同@r3tep您的inputObj
来自哪里?可能是异步代码,在执行循环时还没有填充。在循环中执行console.log(el)
,检查内部内容,这是不可能的。请参阅,所提供的代码中没有错误,因此如果需要帮助,请使用更多信息进行编辑。与inputObj
content类似,与this.state.validation相同