我收到的道具数据看起来像
data: [
{
rowNumber: 1,
specification: null,
validationMessage: [
{
isExists: true,
errors: [
{
errorCode: "PredicateValidator",
errorMessage: "ERR: Length value is not in correct "
},
{
errorCode: "PredicateValidator",
errorMessage: "Height Unit is not in correct "
},
]
}
]
},
{
rowNumber: 2,
specification: null,
validationMessage: [
{
isExists: false,
errors: []
}
]
},
]
在渲染中,我有一个按钮,并且我尝试根据我的errorMessage禁用/启用该按钮。如果我的eoorMessage包含单词“ ERR:”,我将禁用该按钮,否则将启用它。 注意:我的errorMessage可能为空,也可能没有单词“ Err:”。如果出现“ ERR:”字样,则我的任何错误消息都必须禁用按钮
我已经尝试过了,但是说x没有定义。我该如何克服?
render() {
const hasError = this.props.data ? this.props.data.find((x) => x.validationMessage.erros.find(z => z.errorMessage.indexof("ERR:"))) : ''
return (
<div>
{(this.props.data) ?
<div>
(hasError) ?
<Button variant="contained" className={classes.button} onClick={this.handleSave}>Continue</Button>
:
<Button variant="contained" disabled={true} className={classes.button} onClick={this.handleSave}>Continue</Button>
<Button variant="contained" className={classes.button} onClick={this.handleCancle}> Cancel</Button>
</div>
: ''}
</div>
);
答案 0 :(得分:1)
您的代码中存在三个问题。
class Cat {
constructor() {
this.sound = this.sound.bind(this)
this.meow("roar", this.sound)
}
meow(a, callback) {
callback(a)
}
sound(a) {
console.log(a)
console.log(this.sayMeow)
}
sayMeow() {
return "Meow"
}
}
,如果未找到任何元素且其值为可疑值,它将返回indexOf()
。您应该使用-1
includes()
上使用find()
。首先在x.validationMessage.erros
中添加缺少的r
。其次。您需要使用erros
,因为x.validationMessage[0].errors
是一个数组。validationMessage
上使用find()
,如果您希望所有禁用的按钮都将返回第一次出现,则应使用data
,否则filter()
可以。 您的问题对我来说还不清楚。我假设要获取其中有find()
的所有项目。
如果要检查其中是否包含"ERR:"
或不使用err
.some()
答案 1 :(得分:0)
首先,您需要解决validationMessage.erros
和.indexof
之类的拼写错误。
根据您的数据,``应该为validationMessage.errors
,而.indexof
应该为.indexOf
。
第二,您需要了解indexOf。当您的数据errorMessage: "ERR: ...
时,表达式z.errorMessage.indexOf("ERR:"))
将返回0
,该布尔值将被计算为false
。
要解决此问题,您需要将其更新为z.errorMessage.indexOf("ERR:") >=0
,以便hasError变量应为:
const hasError = this.props.data ? this.props.data.find((x) => x.validationMessage.erros.find(z => z.errorMessage.indexof("ERR:") >= 0 )) : ''