首先搞明白mvvm是啥意思轨帜。vm是view mode的意思。所以mvvm框架是要有一個(gè)vm對(duì)象衩椒,來映射view蚌父。也就是vm對(duì)象的屬性發(fā)生改變的時(shí)候,對(duì)應(yīng)的視圖部分會(huì)相對(duì)應(yīng)更新毛萌。
比較經(jīng)典的有knockoutjs苟弛,里面比較關(guān)鍵的概念就是view model,compute阁将,view模板等膏秫。對(duì)的,vue中其實(shí)是有不少它的影子做盅。
然后來看看react缤削,它沒有純粹意義上的vm對(duì)象窘哈,它有的是屬性和狀態(tài)。用屬性和狀態(tài)去映射視圖亭敢。那么屬性和狀態(tài)和vm有什么區(qū)別呢滚婉?個(gè)人認(rèn)為,vm對(duì)象不管你值是從外部傳進(jìn)來的還是自己內(nèi)部定義的吨拗,最后都一視同仁满哪。很多情況還有雙向綁定的機(jī)制,可能早期的flex劝篷,讓人感到驚艷吧哨鸭,后面的mvvm框架都有雙向綁定的概念。而react娇妓,強(qiáng)調(diào)的是屬性不可變性像鸡,單向數(shù)據(jù)流。內(nèi)部的狀態(tài)內(nèi)部自己控制哈恰。這樣的設(shè)計(jì)可能從設(shè)計(jì)上更復(fù)雜一些只估,但是從使用上變得更確定,更清晰了着绷。
如果react用的比較熟蛔钙,給合適的組件管理合適的狀態(tài),做好狀態(tài)的合理分層荠医,會(huì)大大降低應(yīng)用復(fù)雜度吁脱。然后,redux有個(gè)很先進(jìn)的概念叫容器組件和純展示組件彬向,如果領(lǐng)悟了這個(gè)設(shè)計(jì)思路的話兼贡,把復(fù)雜的東西集中到少部分組件中,大部分組件就變成純展示組件娃胆,進(jìn)一步降低應(yīng)用復(fù)雜性遍希。
文章轉(zhuǎn)載自(https://www.zhihu.com/question/310674885/answer/585340871)。