基礎(chǔ):
vue 是雙向綁定,MVVM
react 是單項(xiàng)數(shù)據(jù)流 ui = f(data)
進(jìn)階:
vue 早就不強(qiáng)調(diào) MVVM,主要強(qiáng)調(diào)數(shù)據(jù)響應(yīng)式(核心),也早就沒有了雙向綁定,全篇文檔就只有 v-model 出現(xiàn)了這個(gè)詞。
react 核心的函數(shù)式,(無副作用,引用透明,純函數(shù),數(shù)據(jù)不可變)這些詞 vue 從來不會(huì)提到,絕對(duì)不會(huì)說,hook 是怎么實(shí)現(xiàn)在函數(shù)里實(shí)現(xiàn)狀態(tài)
vue 是一個(gè)以數(shù)據(jù)響應(yīng)式為核心的 ui 框架,她的核心思想是吧所有的數(shù)據(jù)放進(jìn)一個(gè)對(duì)象,然后操作這個(gè)對(duì)象,對(duì)象被監(jiān)聽對(duì)改變以后去改變ui。
react 用一個(gè)函數(shù)來表示一個(gè)組件,你爸?jǐn)?shù)據(jù)放進(jìn)去,他就會(huì)把數(shù)據(jù)渲染進(jìn)去,然后我們?cè)诜艛?shù)據(jù)的時(shí)候,我們要做到數(shù)據(jù)不可變,不能像vue那樣去改變之前的數(shù)據(jù),而是新生成一個(gè)跟之前不一樣的數(shù)據(jù),然后塞到函數(shù)里,然后這個(gè)函數(shù)會(huì)生成新的 ui,之后通過 dom diff 對(duì)比這兩個(gè)ui,得到一個(gè)patch,然后把這個(gè)patch更新到dom樹立,
這個(gè)思想完全和vue不一樣,有沒有發(fā)現(xiàn)vue是不需要dom diff,數(shù)據(jù)一變?nèi)ジ孪嚓P(guān)的ui就好了,為什么vue 也有dom diff呢?vue是為了解決另一個(gè)問題,server render 問題,解決模版優(yōu)化的問題而不是 ui 的問題。react 是需要的,他得到的是兩個(gè)不同的ui, 通過 diff 一下才知道那里需要更新。
定位:這倆定位是差不多的,都是處理 UI 層的,只不過 Vue 提倡漸進(jìn)式處理,功能可以一點(diǎn)一點(diǎn)加上去,但是 React ,如果你要用,你需要重新寫,需要加入 webpack jsx
寫法:Vue 推崇模版語法,好像還是在寫 HTML,而 React 完全相反,所有東西都寫在 JS 里面,使用 JSX 語法, 但是 Vue 也可以用 JSX
Hooks:最新版的 Vue 有 Composion Api 和 react 的 hooks 差不多。
UI 更新策略:React 每次都會(huì)生成新的數(shù)據(jù),通過 dom diff 來更新,而 Vue 是數(shù)據(jù)響應(yīng)式,哪里變了哪里更新
文化:Vue 社區(qū)全家桶都準(zhǔn)備好了,Vue-router,vuex,以前還有 vue-resource,現(xiàn)在沒了,而 React,單純的庫,自己去社區(qū)找。