vue心得系列1——methods,computed,watch的區別
使用vue已經有一段時間了,專案當中遇到過很多問題。
之前會通過社群,部落格和百度來觀摩學習大佬前輩們的解決思路,最後轉換到專案和工作當中來解決現有的問題。
這裡是我在解決問題當中對一些點的整理,或者說自我理解。
關於methods,computed,watch的區別,先結合官網給出解釋來區別計算屬性和方法
,
這裡methods方法和computed計算屬性,官網給出最大的區別就是計算屬性依賴於data裡的資料,而方法不依賴。
這裡的依賴通俗地講,如果data裡的資料發生變化,computed會根據其函式裡面包含的計算屬性重新計算;反之,資料如果無變化,computed會直接從快取裡拿到上次的計算結果。
以上就是我對官網解釋的理解。然而,其實在使用過程中,computed與methods的區別還有一些。
寫法區別:computed最後一定要有個返回值,而且不帶引數;methods的返回值和引數都是可有可無的。
用法區別:computed形式上是function()函式,但是可以理解為data裡面的資料,並且這樣使用;methods就是普通的function()函式
場景區別:computed監聽data裡的資料變化,會根據data資料變化而自動重新計算;methods無法監聽data資料
另外就是watch了,其實watch是computed的一個拓展,與computed形成互補,作用都是監聽data()資料。而區別就是computed監聽資料,需要返回切必須返回一個新的值(形式上function,本質是data),所以監聽之後隨動的資料只有一個(return後的資料);watch則是不管是形式還是本質都是一個function,所以可以監聽資料,並隨動改變多個值。
下面是我做的一個表格總結
區別 | 形式 | 本質 | 場景 | 寫法 | 用法 | 位置 |
methods | function | function | 邏輯方法處理 | 可以帶引數及返回值 | 使用一次呼叫一次 | vue標籤v-on 生命週期函式 methods呼叫其他 |
computed | function | data | 監聽data | 必須攜帶返回值,不允許引數 | 一次呼叫,可以看作data | 一般直接當做data在vue標籤{{}},v-bind中使用 |
watch | function | function | 監聽data | 不允許引數和返回值 | 呼叫一次永久使用 | 一般在生命週期函式,或者在methods被其他方法呼叫 |
以上是我對methods,computed和watch的自己的理解,如果謬誤或表達有誤,還望指正。