欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue3渲染函數(shù)(h函數(shù))的變更剖析

 更新時(shí)間:2022年10月27日 08:33:23   作者:南風(fēng)晚來晚相識  
這篇文章主要介紹了vue3渲染函數(shù)(h函數(shù))的變化,文中給大家介紹了h函數(shù)的三個(gè)參數(shù)詳細(xì)說明及vue3 h函數(shù)-綁定事件,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

vue3 渲染函數(shù)(h函數(shù))的更改

h函數(shù)的更改總結(jié)
1==>h 現(xiàn)在全局導(dǎo)入,而不是作為參數(shù)傳遞給渲染函數(shù)
2==>渲染函數(shù)參數(shù)更改為在有狀態(tài)組件和函數(shù)組件之間更加一致
3==>vnode 現(xiàn)在有一個(gè)扁平的 prop 結(jié)構(gòu)

h函數(shù)的三個(gè)參數(shù)詳細(xì)說明

第一個(gè)參數(shù)是必須的?!靖瓉淼氖且粯拥摹]有發(fā)生變化】
類型:{String | Object | Function} 
一個(gè) HTML 標(biāo)簽名、一個(gè)組件、一個(gè)異步組件、或一個(gè)函數(shù)式組件。
是要渲染的html標(biāo)簽。
第一個(gè)參數(shù)div  是表示創(chuàng)建一個(gè)div的元素 

第二個(gè)參數(shù)是可選的。 
【第二個(gè)參數(shù)的格式發(fā)生了變化, 現(xiàn)在是一個(gè)扁平的 prop 結(jié)構(gòu)】
類型:{Object} 主要是當(dāng)前html中的各種屬性。
在開發(fā)時(shí)。建議傳,實(shí)在沒有傳的時(shí)候,傳入 null

第三個(gè)參數(shù)可選的。(第三個(gè)參數(shù)建議使用函數(shù)返回,否者會有警告)
類型:{String | Array | Object} children
虛擬子節(jié)點(diǎn)(vnodes),當(dāng)前html標(biāo)簽的元素。

ps:第三個(gè)參數(shù)建議使用函數(shù)返回。否者在控制有警告
Non-function value encountered for default slot. Prefer function slots for better performance. 

VNode Props 格式化 vue2.x 語法

{
  class: ['button', 'is-outlined'],
  style: { color: '#34495E' },
  attrs: { id: 'submit' },
  domProps: { innerHTML: '' },
  on: { click: submitForm },
  key: 'submit-button'
}

VNode Props 格式化 vue3.x 語法

{
  class: ['button', 'is-outlined'],
  style: { color: '#34495E' },
  //屬性不需要放在 attrs domProps on這些字段下了。
  id: 'submit',
  innerHTML: '',
  onClick: submitForm,
  key: 'submit-button'
}

vue2中render 函數(shù)將自動接收 h 函數(shù) (它是 createElement 的常規(guī)別名) 作為參數(shù)

render(h){
    return h('div',{
      //第二個(gè)參數(shù)
      class:{
        'is-red': true
      }
    },
    //第三個(gè)參數(shù)  
    [h('p','這是一個(gè)render')]
);

vue3 h函數(shù)-綁定事件

//renderTest.vue
<script lang="ts">
import { h, reactive } from 'vue'
export default {
  setup(props, { slots, attrs, emit }) {
    const state = reactive({
      count: 0
    })

    function increment() {
      state.count++
    }
    // 返回render函數(shù)
    return () =>
      h(
        'button',
        {
          onClick: increment //這里綁定事件
        },
        state.count
      )
  }
}
</script>

vue3 render函數(shù)簡單的循環(huán) map

<script lang="ts">
import { h, reactive } from 'vue'
export default {
    setup() {
      const state = reactive({
        listArr: [
          { name: '三悅有了新工作', like: '工作答辯-你為什來這個(gè)-為了錢',id:'00' },
          { name: '三悅有了新工作', like: '沒有最好的選擇,那不太壞的選擇也可以吧', id: '01' },
          { name: '三悅有了新工作', like: '沒有最好的選擇,那不太壞的選擇也可以吧', id: '02' },
          { name: '三悅有了新工作', like: '沒有那么好,就是比什么都不做多做了一點(diǎn)點(diǎn)而已',id: '03' },
          { name: '三悅有了新工作', like: '能好好說話是因?yàn)閻?,不能好好說話,是因?yàn)樘煜ち司屯诉吔?, id: '04' }
        ]
      })
      // 返回render函數(shù)
      return () =>
        h(
          'ul',
          null,
          [
            state.listArr.map(item => { //通過map進(jìn)行循環(huán)
              return h('li', { key: item.id }, ['劇名:',item.name,'我喜歡的句子:', item.like])
            })
          ]
        )
    }
}
</script>

vue3 默認(rèn)插槽-slots.default?.()

//renderTest.vue 文件
<script lang="ts">
import { h } from 'vue'
export default {
  setup(props, { slots }) {
    return () =>
      h(
        'div',
        null,
        [  
          h('h1', null, '我組件的默認(rèn)內(nèi)容'), 
          h('h2', null, [slots.default?.()]), 
        ]
      )
  }
}
</script>
//頁面使用 renderTest.vue這個(gè)組件
<template>
    <div class="father-div">
        <renderTest>
            <p>默認(rèn)插槽</p>
        </renderTest>
    </div>
</template>
<script setup lang="ts">
import renderTest from './renderTest.vue'
</script>

具名插槽

//renderTest.vue 文件
<script lang="ts">
import { h } from 'vue'
export default {
  setup(props, { slots }) {
    return () =>
      h(
        'div',
        null,
        [  
          //第三個(gè)參數(shù)建議使用函數(shù)返回.
          h('h1', null, '我組件的默認(rèn)內(nèi)容'), 
          h('h2', null, [slots.details?.()]), 
        ]
      )
  }
}
</script>
//頁面使用 renderTest.vue這個(gè)組件
<template>
    <div class="father-div">
        <renderTest>
           <template #details>
             <p>我是具名插槽中的內(nèi)容</p>
           </template>
        </renderTest>
    </div>
</template>
<script setup lang="ts">
import renderTest from './renderTest.vue'
</script>

props 父傳子

//renderTest.vue
<script lang="ts">
import { h } from 'vue'
export default {
  props: {
    title: {
      type: String
    }
  },
  setup(props, { slots }) {
    return () =>
      h(
        'div',
        null,
        //接受父組件 props傳遞過來的數(shù)據(jù),第三個(gè)參數(shù)建議使用函數(shù)返回
        props.title
      )
  }
}
</script>
//頁面使用 renderTest.vue這個(gè)組件
<template>
  <div class="father-div">
    <renderTest title="父組件給的數(shù)據(jù)"></renderTest>
  </div>
</template>
<script setup lang="ts">
import renderTest from './renderTest.vue'
</script>

emit 子傳父

//renderTest.vue 文件
<script lang="ts">
import { h } from 'vue'
//把按鈕作為標(biāo)簽需要導(dǎo)入
import { ElButton } from 'element-plus'
export default {
  props: {
    title: {
      type: String
    }
  },
  setup(props, { emit }) {
    return () =>
      h(
        'div',
        null,
        [ 
          //把按鈕作為標(biāo)簽需要導(dǎo)入
          h(ElButton, {
            type:"primary",
            // 注意這里需要使用箭頭函數(shù),
            onClick: () => emit('myClick', '123')
          }, 
            //第三個(gè)參數(shù)建議使用函數(shù)返回。否者在控制有警告
            // Non-function value encountered for default slot. Prefer function slots for better performance. 
            ()=>'點(diǎn)擊我'
          )
  
        ]
      )
  }
}
</script>
//頁面使用 renderTest.vue這個(gè)組件
<template>
  <div class="father-div">
    <renderTest @myClick="myClick"></renderTest>
  </div>
</template>
<script setup lang="ts">
import renderTest from './renderTest.vue'
const myClick = (mess:string) => { 
    console.log('子組件給的數(shù)據(jù)', mess)
}
</script>

需要注意的點(diǎn)

1.如果使用ElButton作為標(biāo)簽。需要引入import { ElButton } from 'element-plus'。
否則在頁面中無法正常解析。

2. 第三個(gè)參數(shù)建議使用函數(shù)返回。否者在控制有警告
Non-function value encountered for default slot. Prefer function slots for better performance. 

詳細(xì)地址 :https://cn.vuejs.org/guide/extras/render-function.html#v-if

到此這篇關(guān)于vue3渲染函數(shù)(h函數(shù))的變化的文章就介紹到這了,更多相關(guān)vue3渲染函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue單行文本溢出會出現(xiàn)title提示自定義指令

    vue單行文本溢出會出現(xiàn)title提示自定義指令

    這篇文章主要為大家介紹了vue單行文本溢出會出現(xiàn)title提示自定義指令,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • Vue路由組件的緩存keep-alive和include屬性的具體使用

    Vue路由組件的緩存keep-alive和include屬性的具體使用

    :瀏覽器頁面在進(jìn)行切換時(shí),原有的路由組件會被銷毀,通過緩存可以保存被切換的路由組件,本文主要介紹了Vue路由組件的緩存keep-alive和include屬性的具體使用,感興趣的可以了解一下
    2023-11-11
  • vue之?dāng)?shù)據(jù)代理詳解

    vue之?dāng)?shù)據(jù)代理詳解

    這篇文章主要為大家介紹了vue之?dāng)?shù)據(jù)代理,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • Vue使用PDF.js實(shí)現(xiàn)瀏覽pdf文件功能

    Vue使用PDF.js實(shí)現(xiàn)瀏覽pdf文件功能

    這篇文章主要為大家詳細(xì)介紹了Vue如何使用PDF.js實(shí)現(xiàn)瀏覽pdf文件功能,文中的實(shí)現(xiàn)步驟講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以參考一下
    2023-04-04
  • vue.js?diff算法原理詳細(xì)解析

    vue.js?diff算法原理詳細(xì)解析

    這篇文章主要介紹了vue.js?diff算法原理詳細(xì)解析,diff算法可以看作是一種對比算法,對比的對象是新舊虛擬Dom。顧名思義,diff算法可以找到新舊虛擬Dom之間的差異,但diff算法中其實(shí)并不是只有對比虛擬Dom,還有根據(jù)對比后的結(jié)果更新真實(shí)Dom
    2022-06-06
  • Vue實(shí)現(xiàn)獲取后端接口API代碼片段(已封裝Service方法名)

    Vue實(shí)現(xiàn)獲取后端接口API代碼片段(已封裝Service方法名)

    Vue實(shí)現(xiàn)獲取后端接口API代碼片段(已封裝Service方法名),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • 一起來看看Vue的核心原理剖析

    一起來看看Vue的核心原理剖析

    這篇文章主要為大家詳細(xì)介紹了Vue的核心原理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • Vue分頁器組件使用方法詳解

    Vue分頁器組件使用方法詳解

    這篇文章主要為大家詳細(xì)介紹了Vue分頁器組件的使用方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 簡單了解vue.js數(shù)組的常用操作

    簡單了解vue.js數(shù)組的常用操作

    這篇文章主要介紹了簡單了解vue.js數(shù)組的常用操作,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,,需要的朋友可以參考下
    2019-06-06
  • mpvue開發(fā)音頻類小程序踩坑和建議詳解

    mpvue開發(fā)音頻類小程序踩坑和建議詳解

    這篇文章主要介紹了mpvue開發(fā)音頻類小程序踩坑和建議詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-03-03

最新評論