&gt; render -&gt; onClick={e =&gt; this.onItemAdd(e)} -&gt; onItemAdd -&gt; addItem -&gt; update -&gt; UpdatePromise -&gt; handleUpdateItems -&gt; render loops<p>you seem to have fallen  prey to overengineered examples.<p>that example should be<p>&gt;&gt; render -&gt; onClick={e =&gt; this.onItemAdd(e)}<p>thats it, data change  should re render the tree.