ReactJS - ¿Se llama a render en cualquier momento que se llame a "setState"?


¿React vuelve a renderizar todos los componentes y subcomponentes cada vez que se llama a setState?

Si es así, ¿por qué? Pensé que la idea era que React solo rendía tan poco como fuera necesario-cuando el estado cambiaba.

En el siguiente ejemplo simple, ambas clases se renderizan de nuevo cuando se hace clic en el texto, a pesar del hecho de que el estado no cambia en los clics posteriores, ya que el controlador onClick siempre establece el state con el mismo valor:

this.setState({'test':'me'});

Hubiera esperado que los renders solo sucede si state los datos habían cambiado.

Aquí está el código del ejemplo, como un violín JS , y un fragmento incrustado:

var TimeInChild = React.createClass({
    render: function() {
        var t = new Date().getTime();

        return (
            <p>Time in child:{t}</p>
        );
    }
});

var Main = React.createClass({
    onTest: function() {
        this.setState({'test':'me'});
    },

    render: function() {
        var currentTime = new Date().getTime();

        return (
            <div onClick={this.onTest}>
            <p>Time in main:{currentTime}</p>
            <p>Click me to update time</p>
            <TimeInChild/>
            </div>
        );
    }
});

ReactDOM.render(<Main/>, document.body);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.0.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.0.0/react-dom.min.js"></script>
[1]: http://jsfiddle.net/fp2tncmb/2/

Warning: Undefined property: agent_blog_content::$date_asked in /var/www/agent_etc/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 32

Warning: Undefined property: agent_blog_content::$count_answers in /var/www/agent_etc/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 52