在React.JS中查找功能

时间:2019-03-10 15:07:44

标签: javascript arrays reactjs

我收到的道具数据看起来像

 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>
    );

2 个答案:

答案 0 :(得分:1)

您的代码中存在三个问题。

  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
  2. 您正在includes()上使用find()。首先在x.validationMessage.erros中添加缺少的r。其次。您需要使用erros,因为x.validationMessage[0].errors是一个数组。
  3. 您正在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 )) : ''