<story><title>In search of the perfect JavaScript framework</title><url>https://dev.opera.com/articles/perfect-javascript-framework/</url></story><parent_chain><item><author>danabramov</author><text>&lt;i&gt;&amp;gt;We want to apply values to variables and get the DOM updated. The popular two-way data binding should not be a feature, but a must-have core functionality.&lt;/i&gt;&lt;p&gt;Strongly disagree. I find one-way bindings and one-way data flow much easier to reason about. A little less boilerplate code is not worth mental overhead, cascading updates and hunting down the source of wrong data in my experience.&lt;p&gt;What &lt;i&gt;is&lt;/i&gt; important is &lt;i&gt;not updating the DOM from the code and instead describing it with a pure function&lt;/i&gt;. React, Cycle, Mithril, Mercury do it, and it&amp;#x27;s time we get used to this. &lt;i&gt;This&lt;/i&gt; is the real timesaver, not two-way bindings.&lt;p&gt;`Object.observe` is the wrong way to approach this problem. If you own the data, why invent a complex approach to watch it, if you could update it in a centralized fashion in the first place? Here is a great presentation on that topic: &lt;a href=&quot;http://markdalgleish.github.io/presentation-a-state-of-change-object-observe/&quot; rel=&quot;nofollow&quot;&gt;http:&amp;#x2F;&amp;#x2F;markdalgleish.github.io&amp;#x2F;presentation-a-state-of-chang...&lt;/a&gt;. I strongly suggest you read it (&amp;quot;Space&amp;quot; to switch slides) if these ideas are still alien to you.&lt;p&gt;Even &lt;i&gt;Angular&lt;/i&gt; is abandoning two-way bindings. &lt;a href=&quot;http://victorsavkin.com/post/110170125256/change-detection-in-angular-2&quot; rel=&quot;nofollow&quot;&gt;http:&amp;#x2F;&amp;#x2F;victorsavkin.com&amp;#x2F;post&amp;#x2F;110170125256&amp;#x2F;change-detection-i...&lt;/a&gt;&lt;p&gt;I, for one, welcome our new immutable overlords.</text></item></parent_chain><comment><author>dustingetz</author><text>While I have been using React since it launched in May 2013 and I agree with a lot of what you said, using words like &amp;quot;right&amp;quot; and &amp;quot;wrong&amp;quot; doesn&amp;#x27;t help. React is a great way to write applications but it isn&amp;#x27;t the most mature library ever, and the junior developers I worked with had quite a bit of trouble working with it for a while because functional programming is so &lt;i&gt;different&lt;/i&gt;. The ecosystem is filling in, things are great, but &amp;quot;you are wrong and I am right&amp;quot; harms as much as it helps.</text></comment>
<story><title>In search of the perfect JavaScript framework</title><url>https://dev.opera.com/articles/perfect-javascript-framework/</url></story><parent_chain><item><author>danabramov</author><text>&lt;i&gt;&amp;gt;We want to apply values to variables and get the DOM updated. The popular two-way data binding should not be a feature, but a must-have core functionality.&lt;/i&gt;&lt;p&gt;Strongly disagree. I find one-way bindings and one-way data flow much easier to reason about. A little less boilerplate code is not worth mental overhead, cascading updates and hunting down the source of wrong data in my experience.&lt;p&gt;What &lt;i&gt;is&lt;/i&gt; important is &lt;i&gt;not updating the DOM from the code and instead describing it with a pure function&lt;/i&gt;. React, Cycle, Mithril, Mercury do it, and it&amp;#x27;s time we get used to this. &lt;i&gt;This&lt;/i&gt; is the real timesaver, not two-way bindings.&lt;p&gt;`Object.observe` is the wrong way to approach this problem. If you own the data, why invent a complex approach to watch it, if you could update it in a centralized fashion in the first place? Here is a great presentation on that topic: &lt;a href=&quot;http://markdalgleish.github.io/presentation-a-state-of-change-object-observe/&quot; rel=&quot;nofollow&quot;&gt;http:&amp;#x2F;&amp;#x2F;markdalgleish.github.io&amp;#x2F;presentation-a-state-of-chang...&lt;/a&gt;. I strongly suggest you read it (&amp;quot;Space&amp;quot; to switch slides) if these ideas are still alien to you.&lt;p&gt;Even &lt;i&gt;Angular&lt;/i&gt; is abandoning two-way bindings. &lt;a href=&quot;http://victorsavkin.com/post/110170125256/change-detection-in-angular-2&quot; rel=&quot;nofollow&quot;&gt;http:&amp;#x2F;&amp;#x2F;victorsavkin.com&amp;#x2F;post&amp;#x2F;110170125256&amp;#x2F;change-detection-i...&lt;/a&gt;&lt;p&gt;I, for one, welcome our new immutable overlords.</text></item></parent_chain><comment><author>nilliams</author><text>Yep the Ember team also seem to have come to the same conclusion on 2-way bindings.&lt;p&gt;My dumb takeaway is something like &amp;#x27;2-way bindings demo well but are rarely what you actually want in real apps&amp;#x27;.&lt;p&gt;I think (not 100% sure) Tom &amp;amp; Yehuda (of Ember) talk about how they became disenfranchised with 2-way bindings in their recent Changelog podcast episode on Ember 2 [1].&lt;p&gt;[1] &lt;a href=&quot;http://thechangelog.com/131/&quot; rel=&quot;nofollow&quot;&gt;http:&amp;#x2F;&amp;#x2F;thechangelog.com&amp;#x2F;131&amp;#x2F;&lt;/a&gt;</text></comment>