constructor vs componentWillMount; what a componentWillMount can do that a constructor cannot? : <p>As far as I could see, the only thing a <code>componentWillMount</code> can do and a <code>constructor</code> cannot is to call <code>setState</code>.</p>

<pre><code>componentWillMount() {
    setState({ isLoaded: false });
}
</code></pre>

<p>Since we have not called <code>render</code> yet, a <code>setState</code> in <code>componentWillMount</code> will prepare the state object before we enter the first <code>render()</code> pass. Which is essentially the same thing a <code>constructor</code> does:</p>

<pre><code>constructor(props) {
    super(props);
    this.state = { isLoaded: false };
}
</code></pre>

<hr>

<p>But I see another use case where <code>componentWillMount</code> is useful (on server side).</p>

<p>Let's consider something asynchronous:</p>

<pre><code>componentWillMount() {
    myAsyncMethod(params, (result) =&gt; {
        this.setState({ data: result });
    })
}
</code></pre>

<p>Here we cannot use the <code>constructor</code> as assignment to <code>this.state</code> won't trigger <code>render()</code>.</p>

<p>What about <code>setState</code> in <code>componentWillMount</code>? According to <a href="https://facebook.github.io/react/docs/react-component.html#componentwillmount" rel="noreferrer">React docs</a>:</p>

<blockquote>
  <p><code>componentWillMount()</code> is invoked immediately before mounting occurs. It
  is called before <code>render(</code>), therefore setting state in this method will
  not trigger a re-rendering. Avoid introducing any side-effects or
  subscriptions in this method.</p>
</blockquote>

<p>So, here I think React will use the new state value for the first render and avoids a re-render.</p>

<p><strong>Question 1:</strong> Does this means, inside <code>componentWillMount</code>, if we call <code>setState</code> in an async method's callback (can be a promise callback), React <strong>blocks initial rendering</strong> until the callback is executed?</p>

<p>Having this setup on <strong>client-side</strong> (yes I see that use case in server-side rendering), if I assume the above is true, I will not see anything until my asynchronous method completes.</p>

<p>Am I missing any concepts?</p>

<p><strong>Question 2:</strong> Are the any other use cases that I can achieve with <code>componentWillMount</code> only, but not using the <code>constructor</code> and <code>componentDidMount</code>?</p>
