This simple React button class triggers an infinite loop on click (i.e. logging 'click!' to the console 100s of times):
///////////////////////////////////////////////////////////////////////////////////////////
// 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')
);
The infinite loop is not triggered every time, but around every 10th time I load the page and click the button (in a non-repeatable manner). It's independent of the browser I use.
Any ideas where this is coming from?
I know this isn't repeatable in a JS-fiddle. The question is 'Where should I start to look in my setup for where this condition is coming from? Browserify? Imported scripts? React itself?'
I don't know if it'll help as your code part doesn't has any parameter but I had almost the same symptoms, the onclick callback function was called in a loop:
<Button onClick={this.close(id)}>
    Close
</Button>
I finally understood my mistake. A closure was expected while I was simply running the function... So, if the function doesn't take any parameter, we can just use onClick={this.close} but otherwise, in ES6, we need to use arrow functions to simply pass the function:
<Button onClick={() => this.close(id)}>
    Close
</Button>
onClick the anonymous function is called and executes this.close(id)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With