最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2022年10月27日 08:33:23   作者:南風(fēng)晚來(lái)晚相識(shí)  
這篇文章主要介紹了vue3渲染函數(shù)(h函數(shù))的變化,文中給大家介紹了h函數(shù)的三個(gè)參數(shù)詳細(xì)說(shuō)明及vue3 h函數(shù)-綁定事件,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(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ì)說(shuō)明

第一個(gè)參數(shù)是必須的?!靖瓉?lái)的是一樣的。沒(méi)有發(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中的各種屬性。
在開(kāi)發(fā)時(shí)。建議傳,實(shí)在沒(méi)有傳的時(shí)候,傳入 null

第三個(gè)參數(shù)可選的。(第三個(gè)參數(shù)建議使用函數(shù)返回,否者會(huì)有警告)
類型:{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 語(yǔ)法

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

VNode Props 格式化 vue3.x 語(yǔ)法

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

vue2中render 函數(shù)將自動(dòng)接收 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ù)簡(jiǎn)單的循環(huán) map

<script lang="ts">
import { h, reactive } from 'vue'
export default {
    setup() {
      const state = reactive({
        listArr: [
          { name: '三悅有了新工作', like: '工作答辯-你為什來(lái)這個(gè)-為了錢',id:'00' },
          { name: '三悅有了新工作', like: '沒(méi)有最好的選擇,那不太壞的選擇也可以吧', id: '01' },
          { name: '三悅有了新工作', like: '沒(méi)有最好的選擇,那不太壞的選擇也可以吧', id: '02' },
          { name: '三悅有了新工作', like: '沒(méi)有那么好,就是比什么都不做多做了一點(diǎn)點(diǎn)而已',id: '03' },
          { name: '三悅有了新工作', like: '能好好說(shuō)話是因?yàn)閻?ài),不能好好說(shuō)話,是因?yàn)樘煜ち司屯诉吔?, id: '04' }
        ]
      })
      // 返回render函數(shù)
      return () =>
        h(
          'ul',
          null,
          [
            state.listArr.map(item => { //通過(guò)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>
//頁(yè)面使用 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>
//頁(yè)面使用 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 父?jìng)髯?/h3>
//renderTest.vue
<script lang="ts">
import { h } from 'vue'
export default {
  props: {
    title: {
      type: String
    }
  },
  setup(props, { slots }) {
    return () =>
      h(
        'div',
        null,
        //接受父組件 props傳遞過(guò)來(lái)的數(shù)據(jù),第三個(gè)參數(shù)建議使用函數(shù)返回
        props.title
      )
  }
}
</script>
//頁(yè)面使用 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>
//頁(yè)面使用 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'。
否則在頁(yè)面中無(wú)法正常解析。

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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

龙岩市| 阳东县| 钦州市| 中阳县| 翼城县| 榕江县| 会昌县| 洪湖市| 宜黄县| 专栏| 阜阳市| 云南省| 乌审旗| 中卫市| 乐清市| 类乌齐县| 涟源市| 离岛区| 深圳市| 南和县| 浦北县| 壶关县| 清涧县| 南皮县| 翁牛特旗| 墨脱县| 大化| 桐乡市| 绩溪县| 宁国市| 余干县| 孟津县| 江口县| 寿光市| 茂名市| 水富县| 平邑县| 长阳| 河西区| 乌鲁木齐县| 平阳县|