vue2
中有data、computed、method
等,我們有時候尋找乙個變數或者函式就需要翻閱整段**。vue3
提出了組合式api
,並且提出了可以使用組合式api
的地方—setup
。
>
>
>
}p>
@click
="add"
>
加1button
>
div>
template
>
>
import
from
'vue'
;export
default
return;}
}script
>
setup
元件選項在建立元件之前執行,此時尚未建立元件例項,所以setup
中並沒有this
,所以在這裡除了props
和context
的屬性之外,都無法訪問元件中宣告的任何屬性。
setup
接受props
和context
。
props:},
setup
(props)
return
// 這裡返回的任何內容都可以用於元件的其餘部分
}
在setup
內部可以呼叫生命週期鉤子:
beforecreate
not needed*
created
not needed*
beforemount
onbeforemount
mounted
onmounted
beforeupdate
onbeforeupdate
updated
onupdated
beforeunmount
onbeforeunmount
unmounted
onunmounted
errorcaptured
onerrorcaptured
rendertracked
onrendertracked
rendertriggered
onrendertriggered
在setup
中可以使用provider
和inject
:
import
from
'vue'
;// ...
setup()
)}
import
from
'vue'
;// ...
setup()
}
給provider
和inject
提供響應式,確保(祖)父元件資料改變時,可以影響到子元件:
import
from
'vue'
// ...
setup()
)provide
('location'
, location)
provide
('geolocation'
, geolocation)
}
這樣就ok了。
如果想要改變geolocation
,建議在提供的元件內部宣告乙個方法讓其更改:
// (祖)父元件
methods:
}
如果一定要在子元件更改的話, 在父元件注入這個方法,在子元件呼叫:
setup()
)const
updatelocation=(
)=>
provide
('location'
, location)
provide
('geolocation'
, geolocation)
provide
('updatelocation'
, updatelocation)
}
// 子元件
import
from
'vue'
export
default
}}
如果想確保provide
傳遞的資料不會被注入的元件更改,可以使用readonly
:
provide
('location'
,readonly
(location)
)provide
('geolocation'
,readonly
(geolocation)
)
這個方法可以獲得當前元件的例項,然後通過ctx
屬性獲得當前上下文,這樣就可以在setup
中使用router
和vuex
了($router
和$store)
。
但是這個方法只能在setup
和生命週期中使用。
p.s. 在setup
中不能使用async
和await
vue3學習筆記
vue3 1.context.emit update xx props.xx 可 v model xx更新xx的值 個人記憶,雙向繫結 需要雙向改變的值 代替 vue2 sync 2.元件上繫結的事件預設是繫結第一層,可使用inheritattrs false 取消預設,在需要繼承的屬性的標籤使用v...
vue3學習總結
v model 2.x語法 title.sync oldvalue childcomponent this emit update title newvalue 3.x語法v model title oldvalue childcomponent 所有v model不到引數,一定要改變道具和事件名稱...
Vue3 的初次學習
vue3 出來了,真是乙個激動人心的時刻,可是我又要學習了,開心 bushi 對於製作原型或學習,你可以這樣使用最新版本 src script vue 提供了乙個官方的 cli,為單頁面應用 spa 快速搭建繁雜的腳手架。它為現代前端工作流提供了 batteries included 的構建設定。只...