vue和react不同之處

2021-10-07 12:36:24 字數 2791 閱讀 4275

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的主要場景是記憶體資料庫,作為訊息佇列來說可靠性太差,而且...