react 和vue

相同之處:

1拐纱、使用 Virtual DOM
2、提供了響應(yīng)式 (Reactive) 和組件化 (Composable) 的視圖組件
3、將注意力集中保持在核心庫,而將其他功能如路由和全局狀態(tài)管理交給相關(guān)的庫

不同之處:

在 React 應(yīng)用中史煎,當(dāng)某個(gè)組件的狀態(tài)發(fā)生變化時(shí)谦屑,它會(huì)以該組件為根驳糯,重新渲染整個(gè)組件子樹。在 Vue 應(yīng)用中氢橙,組件的依賴是在渲染過程中自動(dòng)追蹤的酝枢,所以系統(tǒng)能精確知曉哪個(gè)組件確實(shí)需要被重渲染。

react 是函數(shù)式的思想悍手,把組件設(shè)計(jì)成純組件帘睦,狀態(tài)和邏輯通過參數(shù)傳入,所以在react中坦康,是單向數(shù)據(jù)流竣付,推崇結(jié)合immutable來實(shí)現(xiàn)數(shù)據(jù)不可變。 改變state 之后重新渲染走完渲染流程滞欠,所以一個(gè)組件更新古胆,下面的子組件都會(huì)更新。react的性能優(yōu)化需要手動(dòng)去做筛璧,而vue的性能優(yōu)化是自動(dòng)的逸绎。 一般使用shouldComponentUpdate 優(yōu)化,或者PureComponent(PureComponent就是重寫了shouldComponentUpdate

模板和 JSX:

1夭谤、React與Vue最大的不同是模板的編寫棺牧。
Vue鼓勵(lì)你去寫近似常規(guī)HTML的模板。寫起來很接近標(biāo)準(zhǔn)HTML元素朗儒,只是多了一些屬性颊乘。

<ul>
    <template v-for="item in items">
        <li>{{ item.msg }}</li>
        <li class="divider"></li>
    </template>
</ul>

React推薦你所有的模板通用JavaScript的語法擴(kuò)展——JSX書寫.但使用JavaScript而不是模板來開發(fā),賦予了開發(fā)者許多編程能力醉锄。

<ul className="pasta-list">
    {
        Object.keys(this.state.pastadishes).map(key =>
            <PastaItem index={key} key={key} details={this.state.pastadishes[key]} addToOrder={this.addToOrder} orders={this.state.orders[key]} />
        )
    }
</ul>

性能:

1疲牵、在react中,當(dāng)組件狀態(tài)改變時(shí)榆鼠,它會(huì)觸發(fā)整個(gè)子組件數(shù)重新渲染纲爸,以根組件作為渲染基點(diǎn)。為了避免不必要的子組件重新渲染妆够,你需要使用PureComponent或者實(shí)現(xiàn) shouldComponentUpdate识啦。

2负蚊、在Vue中,一個(gè)組件在渲染期間依賴于自動(dòng)追蹤颓哮,因此系統(tǒng)知道提前預(yù)判哪一個(gè)組件需要渲染當(dāng)組件狀態(tài)發(fā)生改變時(shí)家妆。每個(gè)組件可以被認(rèn)為具有自動(dòng)為你實(shí)現(xiàn)shouldComponentUpdate,不需要注意嵌套的組件冕茅。

狀態(tài)管理:
1伤极、在React中一個(gè)比較大的內(nèi)容就是函數(shù)式編程。如果你用過現(xiàn)在流行的Redux狀態(tài)管理庫姨伤,你大部分的開發(fā)時(shí)間都是在寫函數(shù)式的內(nèi)容哨坪。
2、與Redux類似乍楚,Vuex也受到Flux的啟發(fā)当编。 然而,與Redux不同的是徒溪,Vuex改變了狀態(tài)忿偷,而不是使?fàn)顟B(tài)不可變,并像Redux的“reducer”函數(shù)一樣完全替代它臊泌。


vue 的雙向數(shù)據(jù)綁定:

vue 和react 其實(shí)都是單向數(shù)據(jù)流鲤桥,但是vue 支持雙向綁定。
先介紹一下 mvvm:

JS 幾個(gè)流行的框架 Vuejs渠概、Ember.js茶凳、AngularJS 都使用 MVVM 模式,該模式叫做視圖模型雙向數(shù)據(jù)綁定高氮,以達(dá)到數(shù)據(jù)和視圖快速同步的目的慧妄。

image.png
  • View: 視圖,模板剪芍,顯示數(shù)據(jù)的塞淹;
  • Model: 代表數(shù)據(jù),可以在 Model 層中定義數(shù)據(jù)修改和操作的業(yè)務(wù)邏輯
  • ViewModel :連接 Model 和 View罪裹。

那么如何通過ViewModel 鏈接View 和Model 達(dá)到數(shù)據(jù)同步呢饱普?

1、Model (數(shù)據(jù))-> View(視圖)状共,
2套耕、View(視圖)-> Model (數(shù)據(jù))

實(shí)現(xiàn)數(shù)據(jù)傳遞,我們就要去監(jiān)聽數(shù)據(jù)變化和視圖的變化

監(jiān)聽DOM 改變:

  • 就是 DOM 的改變峡继,我們監(jiān)聽到之后冯袍,將模型變量 message 做同步更改!就是視圖改變傳遞到了模型上

監(jiān)聽模型數(shù)據(jù)變化,數(shù)據(jù)劫持:

var o = {}; // 創(chuàng)建一個(gè)新對(duì)象

// 在對(duì)象中添加一個(gè)屬性與存取描述符的示例
var messageValue;
Object.defineProperty(o, "message", {
  get : function(){
    return messageValue;
  },
  set : function(newValue){
    messageValue = newValue;
  },
});

關(guān)于 Object.defineProperty 大家可以參考:Object.defineProperty康愤。除此之外 ES6 的 Proxy 也可以完成此項(xiàng)功能儡循。據(jù)稱 vue3 就會(huì)使用 Proxy 代替 defineProperty。

觀察者模式征冷,Observer

觀察者模式(也叫模型 Model - 視圖 View 模式择膝、源 Source - 收聽者 Listener 模式或從屬者模式)是設(shè)計(jì)模式的一種。在此模式中检激,一個(gè)目標(biāo)對(duì)象管理所有依賴它的觀察者對(duì)象肴捉,并且在本身的狀態(tài)改變時(shí)發(fā)出通知。也就是本例中叔收,模型就是目標(biāo)對(duì)象齿穗,而所需要更新的各種視圖DOM就是觀察者

vue數(shù)據(jù)劫持的原理

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末今穿,一起剝皮案震驚了整個(gè)濱河市缤灵,隨后出現(xiàn)的幾起案子伦籍,更是在濱河造成了極大的恐慌蓝晒,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件帖鸦,死亡現(xiàn)場(chǎng)離奇詭異芝薇,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)作儿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門洛二,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人攻锰,你說我怎么就攤上這事晾嘶。” “怎么了娶吞?”我有些...
    開封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵垒迂,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我妒蛇,道長(zhǎng)机断,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任绣夺,我火速辦了婚禮吏奸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘陶耍。我一直安慰自己奋蔚,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開白布烈钞。 她就那樣靜靜地躺著泊碑,像睡著了一般产上。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蛾狗,一...
    開封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天晋涣,我揣著相機(jī)與錄音,去河邊找鬼沉桌。 笑死谢鹊,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的留凭。 我是一名探鬼主播佃扼,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼蔼夜!你這毒婦竟也來了兼耀?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤求冷,失蹤者是張志新(化名)和其女友劉穎瘤运,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體匠题,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡拯坟,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了韭山。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片郁季。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖钱磅,靈堂內(nèi)的尸體忽然破棺而出梦裂,到底是詐尸還是另有隱情,我是刑警寧澤盖淡,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布年柠,位于F島的核電站,受9級(jí)特大地震影響禁舷,放射性物質(zhì)發(fā)生泄漏彪杉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一牵咙、第九天 我趴在偏房一處隱蔽的房頂上張望派近。 院中可真熱鬧,春花似錦洁桌、人聲如沸渴丸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谱轨。三九已至戒幔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間土童,已是汗流浹背诗茎。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留献汗,地道東北人敢订。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像罢吃,于是被迫代替她去往敵國和親楚午。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • React和Vue的相似之處 1.他們都是JavaScript的框架尿招,專注于創(chuàng)造前端的富應(yīng)用 2.不同于早期的Ja...
    是劉某啊閱讀 1,817評(píng)論 0 0
  • 這篇文章記錄我在使用Vue和React的時(shí)候矾柜,對(duì)他們的不同之處的一些思考,不僅局限于他們本身就谜,也會(huì)包括比如Vuex...
    waterte閱讀 754評(píng)論 0 3
  • React 和 Vue 的區(qū)別 博主面了幾家公司吁伺,看簡(jiǎn)歷上寫著使用Vue.js框架饮睬,就會(huì)問租谈,你能說一說 vue 和...
    彭道寬閱讀 859評(píng)論 0 2
  • 前端這幾年的技術(shù)發(fā)展很快篮奄,細(xì)分下來,主要可以分成四個(gè)方面: 開發(fā)語言技術(shù)割去,主要是ES6&7窟却,coffeescrip...
    Su丶_33b0閱讀 15,119評(píng)論 3 46
  • 如今的大學(xué),不再是以往人們羨慕的象牙塔呻逆。 進(jìn)入大學(xué)夸赫,與友交往中,你會(huì)發(fā)現(xiàn)人居然還可以這樣做咖城,你會(huì)慢慢地了解到茬腿,以往...
    可小白閱讀 143評(píng)論 0 0