React 按钮中的无限循环

IT技术 javascript reactjs
2021-05-19 20:02:09

这个简单的 React 按钮类在点击时触发无限循环(即,将“click!”记录到控制台 100 次):

///////////////////////////////////////////////////////////////////////////////////////////
// TestButton.js

exports.TestButton = React.createClass({

    onClick: function(event) {
        event.preventDefault();
        event.stopPropagation();
        console.log('Click!')
    },

    render() {
        return (
            <div>
                <button type="button" onClick={this.onClick}>Click me!</button>
            </div>
        )
    }
});


///////////////////////////////////////////////////////////////////////////////////////////
// main.js

var TestButton = require('./TestButton.js').TestButton;

ReactDOM.render(
    <div>
        <TestButton/>
    </div>,
  document.getElementById('main')
);

无限循环不是每次都触发,而是大约每 10 次我加载页面并单击按钮(以不可重复的方式)。它独立于我使用的浏览器。

这是从哪里来的任何想法?

我知道这在 JS 小提琴中是不可重复的。问题是“我应该从哪里开始查看我的设置以了解这种情况的来源?浏览器?导入脚本?react本身?

1个回答

我不知道它是否会有所帮助,因为您的代码部分没有任何参数,但我有几乎相同的症状,在循环中调用了 onclick 回调函数:

<Button onClick={this.close(id)}>
    Close
</Button>

我终于明白我的错误了。当我简单地运行函数时,预期会出现一个闭包……所以,如果函数不接受任何参数,我们可以直接使用onClick={this.close},否则,在 ES6 中,我们需要使用箭头函数来简单地传递函数:

<Button onClick={() => this.close(id)}>
    Close
</Button>

onClick 匿名函数被调用并执行 this.close(id)