javascript - 如何在给定谓词的情况下禁用按钮

标签 javascript reactjs

我不知道我在哪里做错了,但看起来很奇怪。当我切换 cckeckbox 时,我在数组中添加项目,并根据该数组我希望禁用或不禁用我的按钮。如果为空则禁用,否则激活。项目肯定会添加到数组中。当我添加时,它确实会激活一次,但如果我取消选中它,它不会被禁用。可能是什么问题?

activateButton() {
// arrayOfStatusId is an array 
if (this.state.arrayOfStatusId) { 
  this.setState({
    isButtonActive: false,
  })
} else{
   this.setState({
    isButtonActive: true,
  })
}
}


<Checkbox
  onClick={() => this.selectAllRespondents()}
  onChange={() => this.activateButton()}
/>

selectAllRespondents() {
    const { data, arrayOfStatusId, isCheckedAll } = this.state
    this.setState({
      isCheckedAll: !this.state.isCheckedAll,
    })
    if (!isCheckedAll) {
      for (let i = 0; i < data.length; i++) {
        arrayOfStatusId.push(data[i].status_id)
      }
    } else {
      this.setState({
        arrayOfStatusId: [],
      })
    }
  }

<Button disabled={isButtonActive}>
   ADD
</Button>

最佳答案

根据您的代码,我认为您应该检查 this.state.arrayOfStatusId && this.state.arrayOfStatusId.length。因为如果 arrayOfStatusId 是一个数组,它将始终评估 true,导致 isButtonActive false 始终。

activateButton () => {
    // arrayOfStatusId is an array 
    if (this.state.arrayOfStatusId && this.state.arrayOfStatusId.length) { 
        this.setState({
            isButtonActive: false,
        })
    } else{
       this.setState({
           isButtonActive: true,
       })
    }
}


<Checkbox
  onClick={() => this.selectAllRespondents()}
  onChange={this.activateButton}
/>



<Button disabled={this.state.isButtonActive}>
    ADD
</Button>

此外,如果您使用 activateButton 函数更改 this.state.isButtonActive 的值,并且该值仅用作 Button 的属性> 您还可以删除 activateButton 函数:

<Checkbox
  onClick={() => this.selectAllRespondents()}
/>

<Button disabled={this.state.arrayOfStatusId && this.state.arrayOfStatusId.length}>
    ADD
</Button>

关于javascript - 如何在给定谓词的情况下禁用按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55684247/

相关文章:

javascript - 如何提高这个JS函数的速度

javascript 加载其他脚本 - 调用函数 - 未定义

reactjs - 当 docker 容器内的数据发生更改时,Create-react-app 服务器不会重新编译

javascript - React.js : e. PreventDefault(…) 不是一个函数

javascript - ReactJS 错误 : make sure to pass up the same props that your component's constructor was passed

javascript - 如何使用自定义滚动实现快速滚动

javascript - 使用 window.onunload 调用时,AJAX 调用在 IE8 及更低版本中中止

javascript - 使用 jquery 或 javascript 通过 AJAX 读取嵌套的 JSON 并输出到表

reactjs - 上传单个文件时,Filepond在提交 "real"文件之前先提交一个空文件

javascript - 我如何通过在 reactJS 的 Material 表中创建新行来访问取消处理程序?