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

vue3中h函數(shù)的常用使用方式匯總

 更新時(shí)間:2022年08月18日 09:40:56   作者:鐵皮飯盒  
其實(shí)h()函數(shù)和createVNode()函數(shù)都是創(chuàng)建dom節(jié)點(diǎn),他們的作用是一樣的,下面這篇文章主要給大家介紹了關(guān)于vue3中h函數(shù)的常用使用方式,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言

一般情況下每個(gè)vue組件都用"<template>"寫html, 但實(shí)際還可以在js代碼中通過render函數(shù)生成dom. 最主要常見組件庫也需要配合"h"使用.

render

render是組件的一個(gè)選項(xiàng), 他的返回值會(huì)被作為組件的DOM結(jié)構(gòu).

<script>
import { defineComponent} from "vue";
export default defineComponent({
  render(){
    return '123456789'
  }
});
</script>

試試插入html:

<script>
import { defineComponent } from "vue";
export default defineComponent({
  render(){
    return '<h2>123456789</h2>'
  }
});
</script>

可以看到html標(biāo)簽被當(dāng)做字符串渲染了,** 并沒有生成h2標(biāo)簽. 如何正確插入h2標(biāo)簽?zāi)?**

VNode

如果想插入DOM就要用到"VNode", VNode是vue對(duì)頁面DOM節(jié)點(diǎn)的描述, 其是一個(gè)Object類型.

h

結(jié)構(gòu)這么復(fù)雜的"VNode"肯定不是自己拼寫的, 官方提供了"h"函數(shù), 可以幫助我們生成"VNode"

<script>
import { defineComponent, h } from "vue";
export default defineComponent({
  render() {
    const props = { style: { color: "red" } };
    return h("h2", props, "123456789");
  },
});
</script>

這次生成了真正"h2":

"h"函數(shù)的第1個(gè)參數(shù)是"標(biāo)簽名", 第2個(gè)是"屬性", 在這個(gè)例子里可以理解為html的所有屬性, 第3個(gè)是"內(nèi)容". "內(nèi)容"不僅僅可以是字符串, 還可以是"VNode"或2者混合:

<script>
import { defineComponent, h } from "vue";
export default defineComponent({
  render() {
    const props = { style: { color: "red" } };
    const small = h("small", "副標(biāo)題");
    return h("h2", props, ["123456789", small]);
  },
});
</script>

如果實(shí)際只傳入2個(gè)參數(shù), 那么第二2參數(shù)就會(huì)作為內(nèi)容, 比如這里的"small".

渲染組件

"h"還可以渲染"組件", 這一下靈活度就上來了, 假設(shè)我們有一個(gè)"switch"組件, 其支持<switch v-model:checked="checked"/>.

<script>
import { defineComponent, h } from "vue";
import ASwitch from "../components/ASwitch.vue";
export default defineComponent({
  components: { ASwitch },

  data() {
    return { checked: false };
  },

  render() {
    return h(ASwitch)
  }
});
</script>

這里注意第1個(gè)參數(shù)還支持傳入組件對(duì)象. 效果如下:

但是你可以發(fā)現(xiàn)了, "switch"雖然顯示了, 但是點(diǎn)擊后按鈕并不能切換.

h函數(shù)中使用"v-model"

上面不能切換是因?yàn)闆]有像在模板中那樣使用"v-model".

 <a-switch v-model:checked="checked"></a-switch>

回憶下前面講過的"自定義雙向數(shù)據(jù)綁定"課中講的如何實(shí)現(xiàn)"v-model", 對(duì)比下可以發(fā)現(xiàn)上面"h"中,沒有定義"props"和"v-on事件監(jiān)聽", 怎么寫呢? 先說一個(gè)重要的知識(shí)點(diǎn): 組件上的事件監(jiān)聽其實(shí)也可通過"props"傳入:

<a-switch @update:checked="onChange"></a-switch>
<!-- 等價(jià)寫法: -->
<a-switch :onUpdate:checked="onChange"></a-switch>

所有的自定義事件, 都可以通過":on"前綴通過props傳入. 所以在"h"中可以通過第2個(gè)參數(shù)傳入"checked"屬性和"onUpdate:checked"事件實(shí)現(xiàn)"v-model"的等同操作.

<script>
import { defineComponent, h } from "vue";
import ASwitch from "../components/ASwitch.vue";
export default defineComponent({
  components: { ASwitch },

  data() {
    return { checked: false };
  },

  render() {
    return h(ASwitch, {
      checked: this.checked,
      ["onUpdate:checked"]: (checked) => {
        this.checked = checked;
      },
    });
  },
});
</script>

使用場(chǎng)景

實(shí)際開發(fā)中很多第三方組件都設(shè)計(jì)了可以接收"VNode"的"屬性", 比如"ant-design-vue"的"Table"組件的"columns"屬性中的"customRender"屬性, 可以通過傳入"VNode"實(shí)現(xiàn)樣式自定義:

{
    title: '狀態(tài)',
    customRender({ record }: any) {
    if (1 === record.state) {
      return h(Tag, { color: 'success' }, () => `開啟`);
    } else {
      return h(Tag, { color: 'error' }, () => `關(guān)閉`);
    }
  },
},

代碼中通過"h"渲染了"Tag"組件,效果如下:

總結(jié)

這節(jié)課講了3個(gè)概念, 幫大家整理下他們3者的關(guān)系:** "render"函數(shù)的返回值需要是"VNode"格式, "h"函數(shù)可以構(gòu)造"VNode"格式數(shù)據(jù). **

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

相關(guān)文章

  • element-plus按需引入后ElMessage與ElLoading在頁面中的使用

    element-plus按需引入后ElMessage與ElLoading在頁面中的使用

    這篇文章主要介紹了element-plus按需引入后ElMessage與ElLoading在頁面中的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • Vue之data定義的三種方式及區(qū)別說明

    Vue之data定義的三種方式及區(qū)別說明

    這篇文章主要介紹了Vue之data定義的三種方式及區(qū)別說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • vue 的keep-alive緩存功能的實(shí)現(xiàn)

    vue 的keep-alive緩存功能的實(shí)現(xiàn)

    本篇文章主要介紹了vue 的keep-alive緩存功能的實(shí)現(xiàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-03-03
  • Vue2+Elementui?Dialog實(shí)現(xiàn)封裝自定義彈窗組件

    Vue2+Elementui?Dialog實(shí)現(xiàn)封裝自定義彈窗組件

    在日常的管理系統(tǒng)界面中,我們寫的最多的除了列表表格之外,就是各種彈窗組件,本文就來為大家詳細(xì)介紹一下Vue2如何結(jié)合Elementui?Dialog實(shí)現(xiàn)封裝自定義彈窗組件,希望對(duì)大家有所幫助
    2023-12-12
  • 淺談vue-router2路由參數(shù)注意的問題

    淺談vue-router2路由參數(shù)注意的問題

    下面小編就為大家?guī)硪黄獪\談vue-router2路由參數(shù)注意的問題。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-11-11
  • vue+echarts實(shí)現(xiàn)數(shù)據(jù)實(shí)時(shí)更新

    vue+echarts實(shí)現(xiàn)數(shù)據(jù)實(shí)時(shí)更新

    這篇文章主要為大家詳細(xì)介紹了vue+echarts實(shí)現(xiàn)數(shù)據(jù)實(shí)時(shí)更新,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • vue如何實(shí)現(xiàn)未登錄不能訪問某些頁面

    vue如何實(shí)現(xiàn)未登錄不能訪問某些頁面

    這篇文章主要介紹了vue如何實(shí)現(xiàn)未登錄不能訪問某些頁面問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • Vue?Echarts實(shí)現(xiàn)多功能圖表繪制的示例詳解

    Vue?Echarts實(shí)現(xiàn)多功能圖表繪制的示例詳解

    作為前端人員,日常圖表、報(bào)表、地圖的接觸可謂相當(dāng)頻繁,今天小編隆重退出前端框架之VUE結(jié)合百度echart實(shí)現(xiàn)中國地圖+各種圖表的展示與使用;作為“你值得擁有”專欄階段性末篇,值得一看
    2023-02-02
  • 詳解vue保存自動(dòng)格式化換行

    詳解vue保存自動(dòng)格式化換行

    這篇文章主要為大家介紹了vue保存自動(dòng)格式化換行,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • vue.js 1.x與2.0中js實(shí)時(shí)監(jiān)聽input值的變化

    vue.js 1.x與2.0中js實(shí)時(shí)監(jiān)聽input值的變化

    這篇文章主要介紹了vue.js 1.x與vue.js2.0中js實(shí)時(shí)監(jiān)聽input值的變化的相關(guān)資料,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來一起看看吧。
    2017-03-03

最新評(píng)論