Vue 3.0 渲染函數(shù)API

2021-07-16 11:25 更新

#概覽

此更改不會影響 <template> 用戶。

以下是更改的簡要總結:

  • h 現(xiàn)在全局導入,而不是作為參數(shù)傳遞給渲染函數(shù)
  • 渲染函數(shù)參數(shù)更改為在有狀態(tài)組件和函數(shù)組件之間更加一致
  • vnode 現(xiàn)在有一個扁平的 prop 結構

更多信息,請繼續(xù)閱讀!

#Render 函數(shù)參數(shù)

#2.x 語法

在 2.x 中,e render 函數(shù)將自動接收 h 函數(shù) (它是 createElement 的常規(guī)別名) 作為參數(shù):

  1. // Vue 2 渲染函數(shù)示例
  2. export default {
  3. render(h) {
  4. return h('div')
  5. }
  6. }

#3.x 語法

在 3.x 中,h 現(xiàn)在是全局導入的,而不是作為參數(shù)自動傳遞。

  1. // Vue 3 渲染函數(shù)示例
  2. import { h } from 'vue'
  3. export default {
  4. render() {
  5. return h('div')
  6. }
  7. }

#渲染函數(shù)簽名更改

#2.x 語法

在 2.x 中,render 函數(shù)自動接收諸如 h 之類的參數(shù)。

  1. // Vue 2 渲染函數(shù)示例
  2. export default {
  3. render(h) {
  4. return h('div')
  5. }
  6. }

#3.x 語法

在 3.x 中,由于 render 函數(shù)不再接收任何參數(shù),它將主要用于 setup() 函數(shù)內部。這還有一個好處:可以訪問作用域中聲明的響應式狀態(tài)和函數(shù),以及傳遞給 setup() 的參數(shù)。

  1. import { h, reactive } from 'vue'
  2. export default {
  3. setup(props, { slots, attrs, emit }) {
  4. const state = reactive({
  5. count: 0
  6. })
  7. function increment() {
  8. state.count++
  9. }
  10. // 返回render函數(shù)
  11. return () =>
  12. h(
  13. 'div',
  14. {
  15. onClick: increment
  16. },
  17. state.count
  18. )
  19. }
  20. }

有關 setup() 如何工作的詳細信息,參考組合式 API 指南。

#VNode Props 格式化

#2.x 語法

在 2.x 中,domProps 包含 VNode props 中的嵌套列表:

  1. // 2.x
  2. {
  3. class: ['button', 'is-outlined'],
  4. style: { color: '#34495E' },
  5. attrs: { id: 'submit' },
  6. domProps: { innerHTML: '' },
  7. on: { click: submitForm },
  8. key: 'submit-button'
  9. }

#3.x 語法

在 3.x 中,整個 VNode props 結構是扁平的,使用上面的例子,下面是它現(xiàn)在的樣子

  1. // 3.x 語法
  2. {
  3. class: ['button', 'is-outlined'],
  4. style: { color: '#34495E' },
  5. id: 'submit',
  6. innerHTML: '',
  7. onClick: submitForm,
  8. key: 'submit-button'
  9. }

#遷移策略

#工具庫作者

全局導入 h 意味著任何包含 Vue 組件的庫都將在某處包含 import { h } from 'vue',因此,這會帶來一些開銷,因為它需要庫作者在其構建設置中正確配置 Vue 的外部化:

  • Vue 不應綁定到庫中
  • 對于模塊構建,導入應該保持獨立,由最終用戶綁定器處理
  • 對于 UMD/browser 版本,它應該首先嘗試全局 Vue.h,然后回退以請求調用

#下一步

見 Render 函數(shù)指南更詳細的文檔!

以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號