javascript - 更改 forEach 循环中的状态

标签 javascript loops reactjs addeventlistener setstate

如何更改按钮上单击事件的状态?现在我有错误

未捕获类型错误:this.setState 不是函数

我知道我不能在这里使用this.setState,但我不明白我应该在哪里进行绑定(bind)

class Popup extends React.Component {
  constructor(props){
    super(props);
    this.state = {opened: false};
  }

  componentDidMount(){
    var popupOpenBtn = document.querySelectorAll('[data-popup]');

    popupOpenBtn.forEach(function(item) {
      item.addEventListener("click", function(){
        this.setState({
          opened: true
        });
      })
    });
  }

最佳答案

您的点击处理程序的范围仅限于按钮,而不是类。试试这个:

class Popup extends React.Component {
  constructor(props){
    super(props);
    this.state = {opened: false};
  }

  componentDidMount(){
    var popupOpenBtn = document.querySelectorAll('[data-popup]');
    var component = this;

    popupOpenBtn.forEach(function(item) {
      item.addEventListener("click", function() {
        component.setState({
          opened: true
        });
      })
    });
  }

关于javascript - 更改 forEach 循环中的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38938047/

相关文章:

javascript - 带有 Phonegap 的 TabBar 不适用于每个页面

javascript - 使用 Gulp 抑制 JSHint 中的分号警告

Javascript 相等运算符

javascript - 如何使用 jquery 循环遍历具有嵌套对象的数组?

javascript - React Component 在内部事件上更改 Prop

asp.net - 如何在我的 ASP.NET 项目中使用 JavaScript 文件?

java - 我正在比较来自 2 个独立数组的 2 组整数值

javascript - 无法在循环中休眠

ecmascript-6 - 解释一下 ES6/JSX 代码中使用的问号 (?)

reactjs - 确定派发返回值的类型