<p dir="auto">Kind of related <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="40688815" data-permission-text="Title is private" data-url="https://github.com/facebook/react/issues/2073" data-hovercard-type="issue" data-hovercard-url="/facebook/react/issues/2073/hovercard" href="https://github.com/facebook/react/issues/2073">#2073</a></p>
<p dir="auto">It seems to me there's a natural correlation between mount and update methods:</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="getInitialState    =&gt; componentWillReceiveProps
(always true)      =&gt; shouldComponentUpdate
componentWillMount =&gt; componentWillUpdate
componentDidMount  =&gt; componentDidUpdate"><pre class="notranslate"><code class="notranslate">getInitialState    =&gt; componentWillReceiveProps
(always true)      =&gt; shouldComponentUpdate
componentWillMount =&gt; componentWillUpdate
componentDidMount  =&gt; componentDidUpdate
</code></pre></div>
<p dir="auto">In many situations you want to have the same code for mount/update, but you have to put it in a shared method and call it from both places. It's hardly common enough that it's an issue, but it seems common enough that it strikes me as a bit odd... perhaps. Just an idea, could it make sense to e.g. get rid of mount altogether and instead have the following  (it's extreme perhaps, but just as an example):</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="// mounting
getInitialState
componentWillReceiveProps(update = false?)
componentWillUpdate(update = false)
componentDidUpdate(update = false)

// updating
componentWillReceiveProps(update = true?)
shouldComponentUpdate
componentWillUpdate(update = true)
componentDidUpdate(update = true)"><pre class="notranslate"><code class="notranslate">// mounting
getInitialState
componentWillReceiveProps(update = false?)
componentWillUpdate(update = false)
componentDidUpdate(update = false)

// updating
componentWillReceiveProps(update = true?)
shouldComponentUpdate
componentWillUpdate(update = true)
componentDidUpdate(update = true)
</code></pre></div>
<p dir="auto">It would unify the life-cycle and move away from mounting being treated as entirely separate from updating, it would then be seen as an exception. There would be less potential for inconsistencies causes by mistake/neglect.</p>
<p dir="auto">I haven't thought this through extensively and bring it up mainly to start a discussion, I know many others have wondered why there isn't a life-cycle method for mount+update.</p>
<p dir="auto">Describe what you were doing when the bug occurred:</p>
<ol dir="auto">
<li>Record a 5 second profile in the React Profiler Tab</li>
<li>Switch the React root in the dropdown</li>
</ol>
<hr>
<h2 dir="auto">Please do not remove the text below this line</h2>
<p dir="auto">DevTools version: 4.2.0-a8b8ffb89</p>
<p dir="auto">Call stack: at n.value (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:40:162685)<br>
at m (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:40:332158)<br>
at sc (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:40:332375)<br>
at fi (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:32:59263)<br>
at Hi (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:32:66573)<br>
at lc (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:32:104884)<br>
at kc (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:32:89467)<br>
at wc (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:32:89392)<br>
at pc (chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:32:86341)<br>
at chrome-extension://fmkadmapgofadopljbjfkapdkoienihi/build/main.js:32:45721</p>
<p dir="auto">Component stack: in sc<br>
in div<br>
in div<br>
in _o<br>
in Unknown<br>
in n<br>
in Unknown<br>
in div<br>
in div<br>
in zi<br>
in Ge<br>
in un<br>
in ba<br>
in Rc</p>