You are actually right. Parenthesis do actually cause function to execute. Difference between usage is that when you use onClick={this.flipPlongeur} you are passing function as a parameter to onClick prop for later execution when the click event happen.
You can think it in a simple way like a callback function passing to another function.
var function1 = function(callback) {
if (typeof callback === 'function') callback();
}
var funtion2 = funtion() {
alert('funtion1 fired');
}
function1(function2);
// this would be equal to writing it like this
function1(funtion() {
alert('funtion1 fired');
})
When you use it like onClick={this.flipPlongeur()} you are executing the function right away as the code renders. This is equal to writing it like this,
onClick={ function() { alert('some random string')}() }
So when you use this.stringPlongeur() you want the function to execute right away and return the results or make the changes it does right away.
onClick prop expects a function and executes it with a event parameter when the click event happens on that element.
You can use couple of different ways to pass a function to onClick or any other prop that expects a function.
onClick={this.flipPlongeur} // this would pass the function itself as a parameter
onClick={() => { this.flipPlongeur(); }} // this would create a second function that executes this.flipPlongeur function
Hope this helps you to understand couple of things.
For your error, it is related to executing a function that changes the state of the component while the component is being rendered. This would create a infinite loop so it is not allowed.