vue2和react的區別,細節篇
react是函式式程式設計,immutable.js
vue是大部分是物件導向程式設計,object.freeze
vue中函式式程式設計-filter和reduce函式用法
0.reactjs與vue相比較,預設目錄結構沒有webpack相關配置,也沒有路由元件。
1.vue插值表示式,用雙花括號
} react用單花括號,只有裡面是物件時,裡面的花括號代表物件
}2.vue用 template模板
react用js,class裡面,然後render函式, jsx語法
3.vue state data資料可以雙向繫結v-model
react不能雙向繫結,用setstate設定,元件用 onchange=
oninputchange = (e) => )
}4.vue用v-if v-show
react用
if(condition)else
或者三元運算子
return
5.vue用v-for in 遍歷物件
react用map:
return
6.事件
vue不用bind,
@click @input
react需要bind(this)或者用箭頭函式 (如果函式體大,箭頭韓式效能不如bind)
event物件在vue中是原生的,如mouseevent;
在react中不是原生的,可以用console.log(event.nativeevent),所有事件都掛載document上:
// 1. event 是 syntheticevent ,模擬出來 dom 事件所有能力
// 2. event.nativeevent 是原生事件物件
// 3. 所有的事件,都被掛載到 document 上
// 4. 和 dom 事件不一樣,和 vue 事件也不一樣
react為了解決跨平台,相容性問題,自己封裝了一套事件機制,**了原生的事件,像在jsx中常見的onclick、onchange這些都是合成事件。
7.父子元件傳值
vue:父->子 props
子傳值給父:this.$emit(『add』,this.title)
react:傳值,父子兄弟,都可以用props
// 透傳所有props,vue用$props v-bind,react用
8.proptypes 型別檢查
9.nexttick
setstate 假非同步,直接console.log是取不到資料變化,需要加settimeout或者事件:
setstate並不是真正意義上的非同步操作,它只是模擬了非同步的行為。判斷是直接更新還是先暫存state進佇列。settimeout以及原生事件都會直接去更新state,因此可以立即得到最新state。
setstate傳入物件,就會合併:
this.setstate()
this.setstate()
傳入函式,不會合併
this.setstate((prevstate, props) =>
})this.setstate((prevstate, props) =>
})a.可能是非同步
b.可能會合併,state裡面是物件會合併,如果是函式return物件就不合併。
10.ref,獲取dom元素
vue:
this.$refs.myref
react:
constructor裡面建立物件:this.myref = react.creatref()
呼叫的地方:this.myref.current
11.slot和portals
vue用slot插槽
react的portals,當父元件overflow:hidden或者z-index值太小
可以用portals
return reactdom.createportal( ,
document.body // dom 節點 )
12.context
react的context用法,比如最外層定義的語言或者主題,邏輯不複雜:
const themecontext = react.createcontext(『light』)
class themedbutton extends react.component }
} 13.父元件資料更新,子元件變化
vue,只有關聯資料的子元件變化,其他子元件不會變化
react,所有自元件都更新,所以要用scu鉤子函式,purecomponent,memo優化.
14.protals 傳送門
vue沒有
react有,當父元件有overflow,z-index樣式的時候,但是你需要子元件在視覺上能夠跳出容器,
也就是說能顯示出來。比如對話方塊,提示框等。
15.mixin vs hoc
vue有mixin,管理共享元件資料,資料之間互不干擾
react廢棄了,用高階元件hoc
16.hook
vue的hook是給第三方元件,新增生命週期。或者集中管理函式載入刪除。
在模板中通過@hooks:created這種形式;
vm.$on('hooks:created', cb)或者 vm.$once('hooks:created', cb)。
react的hook是給無狀態元件(函式元件)新增生命週期。
17.無狀態元件,函式元件
vue:
react: function(){}
和equals的不同之處
int a 3 int b 3 string str1 123 string str2 123 string str3 newstring 123 system.out.println a b的結果 a b true,基本資料型別時,進行的是值比較 system.out.println str1 s...
陣列和指標的不同之處
我相信很多初學c語言的人,肯定會以為指標和陣列是等價的,而那些學了一段時間的人或許也分不清兩者之間的區別吧。那麼我有必要和大家千談一下c語言中陣列和指標的不同之處了。1.陣列名對應著一塊記憶體,而不是指向一塊記憶體。其位址與容量在生命週期內保持不變 全域性或棧 只有陣列的內容可變 指標可以隨時指向任...
mq和kafka的不同之處
其實,作為訊息佇列來說,企業中選擇mq的還是多數,因為像rabbit,rocket等mq中介軟體都屬於很成熟的產品,效能一般但可靠性較強,而kafka原本設計的初衷是日誌統計分析,現在基於大資料的背景下也可以做運營資料的分析統計,而redis的主要場景是記憶體資料庫,作為訊息佇列來說可靠性太差,而且...