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

Vue?h函數(shù)的使用詳解

 更新時(shí)間:2021年12月31日 15:39:30   作者:前端怎么那么菜  
本文主要介紹了Vue?h函數(shù)的使用詳解,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

一、認(rèn)識(shí)

文檔:https://v3.cn.vuejs.org/guide/render-function.html#dom-%E6%A0%91

? h() 到底會(huì)返回什么呢?其實(shí)不是一個(gè)實(shí)際的 DOM 元素。它更準(zhǔn)確的名字可能是 createNodeDescription,因?yàn)樗男畔?huì)告訴 Vue 頁(yè)面上需要渲染什么樣的節(jié)點(diǎn),包括及其子節(jié)點(diǎn)的描述信息。我們把這樣的節(jié)點(diǎn)描述為“虛擬節(jié)點(diǎn) (virtual node)”,也常簡(jiǎn)寫它為 VNode 。“虛擬 DOM”是我們對(duì)由 Vue 組件樹建立起來的整個(gè) VNode 樹的稱呼。

二、使用

文檔:https://v3.cn.vuejs.org/guide/render-function.html#h-%E5%8F%82%E6%95%B0

1、h() 參數(shù)

h() 函數(shù)是一個(gè)用于創(chuàng)建 VNode 的實(shí)用程序。也許可以更準(zhǔn)確地將其命名為 createVNode(),但由于頻繁使用和簡(jiǎn)潔,它被稱為 h() 。它接受三個(gè)參數(shù):

// @returns {VNode}
h(
    // {String | Object | Function} tag
    // 一個(gè) HTML 標(biāo)簽名、一個(gè)組件、一個(gè)異步組件、或
    // 一個(gè)函數(shù)式組件。
    //
    // 必需的。
    'div',

    // {Object} props
    // 與 attribute、prop 和事件相對(duì)應(yīng)的對(duì)象。
    // 這會(huì)在模板中用到。
    //
    // 可選的(在開發(fā)時(shí)。建議傳,實(shí)在沒有傳的時(shí)候,傳入 null)
    {},

    // {String | Array | Object} children
    // 子 VNodes, 使用 `h()` 構(gòu)建,
    // 或使用字符串獲取 "文本 VNode" 或者
    // 有插槽的對(duì)象。
    //
    // 可選的。
    [
        'Some text comes first.',
        h('h1', 'A headline'),
        h(MyComponent, {
            someProp: 'foobar'
        })
    ]
)

2、簡(jiǎn)單的使用

3、實(shí)現(xiàn)一個(gè)計(jì)數(shù)器案例

<script>
/* 設(shè)置樣式需要在這引入,如果使用style標(biāo)簽,則不能寫scoped,不利于設(shè)置局部樣式,所以不建議 */
import "./style.css"
import { h, ref } from "vue";

export default {
    // data 的寫法
    // data() {
    //     return {
    //         counter: 0
    //     }
    // },
    setup() {
        const counter = ref(0)
        return { counter }
    },
    /**
     * 使用setup的時(shí)候,下面也可以用this,引入render有綁定this,所以下面取值,要用this
     */
    render() {
        return h("div", null, [
            h("h1", null, `當(dāng)前計(jì)數(shù):${this.counter}`),
            h("button", { onClick: () => this.counter++, class: "button" }, "加 1"),
            h("button", { onClick: () => this.counter--, class: "button" }, "減 1")
        ])
    }
}
</script>

修改成純setup的寫法:

<script>
/* 設(shè)置樣式需要在這引入,如果使用style標(biāo)簽,則不能寫scoped,不利于設(shè)置局部樣式,所以不建議 */
import "./style.css"
import { h, ref } from "vue";

export default {
    // data 的寫法
    // data() {
    //     return {
    //         counter: 0
    //     }
    // },
    setup() {
        const counter = ref(0)
        return () => {
            return h("div", null, [
                h("h1", null, `當(dāng)前計(jì)數(shù):${counter.value}`),
                h("button", { onClick: () => counter.value++, class: "button" }, "加 1"),
                h("button", { onClick: () => counter.value--, class: "button" }, "減 1")
            ])
        }
    }
}
</script>

4、函數(shù)組件和插槽的使用

1)父組件

<script>
import { h, ref } from "vue";
import Test from "./components/Test.vue"
export default {
    setup() {
        return {}
    },
    render() {
        return h(Test, null, {
            // default 對(duì)應(yīng)的是一個(gè)函數(shù),default是默認(rèn)插槽
            default: props => h("span", null, "父?jìng)魅氲浇M件中的內(nèi)容:" + props.name)
        })
    }
}
</script>

2)子組件

<script>
import { h } from "vue";

export default {
    /**
     * 接收夫傳入的內(nèi)容
     */
    render() {
        return h("div", null, [
            h("div", null, "我是子組件"),
            /**
             * 在這判斷別人是否傳入
             * 也可以寫 null,啥也不展示
             * 也可以在傳入一個(gè)參數(shù),使用的是 函數(shù)傳參
             */
            this.$slots.default ? this.$slots.default({ name: "哈哈哈" }) : h("div", null, "我是子組件的默認(rèn)值")
        ])
    }
}
</script>

注:在項(xiàng)目中,如果你像上面一樣寫代碼,就太苦逼了,所以這個(gè)時(shí)候就要用 JSX。

三、jsx的使用

1、jsx的認(rèn)識(shí)

jsx我們通常會(huì)通過Babel來進(jìn)行轉(zhuǎn)換(React編寫的jsx就是通過babel轉(zhuǎn)換的);

對(duì)于Vue來說,我們只需要在Babel中配置對(duì)應(yīng)的插件即可;

文檔:https://v3.cn.vuejs.org/guide/render-function.html#jsx

2、下載Babel插件支持vue(現(xiàn)在貌似腳手架直接支持)

npm install @vue/babel-plugin-jsx -D

3、配置babel

1)在根目錄下創(chuàng)建 .babel.config.js

2)在.babel.config.js 里面加入,如下代碼

module.exports = {
    presets: [
        "@/vue/cli-plugin-babel/preset"
    ],
    plugins: [
        "@vue/babel-plugin-jsx"
    ]
}

4、簡(jiǎn)單的使用

<script>
import { ref } from 'vue'
export default {
    setup() {
        let counter = ref(0)
        return { counter }
    },
    render() {
        return (
            <div>
                <div>JSX的使用</div>
                <h2>當(dāng)前數(shù)字:{this.counter}</h2>
            </div>


        )
    }
}
</script>

5、計(jì)數(shù)器案例

<script>
import { ref } from '@vue/reactivity'

export default {
    setup() {
        let counter = ref(0)
        function add() {
            counter.value++
        }
        function decrement() {
            counter.value--
        }
        return { counter, add, decrement }
    },
    render() {
        return (
            <div>
                <div>JSX的使用</div>
                <h2>當(dāng)前數(shù)字:{this.counter}</h2>
                <button onClick={this.add}>加 1</button>
                <button onClick={this.decrement} >減 1</button>
            </div >
        )
    }
}
</script>

6、組件和插槽的使用

1)父組件

<script>
import { ref } from '@vue/reactivity'
import Test from "./components/Test.vue"
export default {
    setup() {
        let counter = ref(0)
        function add() {
            counter.value++
        }
        function decrement() {
            counter.value--
        }
        return { counter, add, decrement }
    },
    render() {
        return (
            <div>
                <div>JSX的使用</div>
                {/* 如果這塊使用setup里面的變量、方法 要加this */}
                <h2>當(dāng)前數(shù)字:{this.counter}</h2>
                <button onClick={this.add}>加 1</button>
                <button onClick={this.decrement} >減 1</button>
                <hr />
                <Test>
                    {/* 這個(gè)里面寫入傳入的內(nèi)容,也就是傳入一個(gè)插槽 */}
                    {{ default: props => <p>我是父?jìng)魅胱拥?lt;/p> }}
                </Test>
            </div >
        )
    }
}
</script>

2)子組件

<script>
export default {
    /**
     * 接收夫傳入的內(nèi)容
     */
    render() {
        return (
            <div>
                <p>我是組件</p>
                {/* 這塊也有可能沒穿,你要顯示一個(gè)默認(rèn)值,這個(gè)時(shí)候,你就要用三元運(yùn)算符 */}
                {this.$slots.default()}
            </div>
        )
    }
}
</script>

 注:如果你要h函數(shù)來寫組件,請(qǐng)仔細(xì)查看文檔,以上講解,只是入門級(jí)。

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

相關(guān)文章

  • vue-cli3腳手架安裝方法

    vue-cli3腳手架安裝方法

    這篇文章主要介紹了vue-cli3腳手架安裝方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-04-04
  • 可能是vue中使用axios最詳細(xì)教程

    可能是vue中使用axios最詳細(xì)教程

    Axios是一個(gè)基于Promise用于瀏覽器和nodejs的HTTP客戶端,本質(zhì)上也是對(duì)原生XHR的封裝,只不過它是Promise的實(shí)現(xiàn)版本,符合最新的ES規(guī)范,下面這篇文章主要給大家介紹了關(guān)于vue中使用axios最詳細(xì)教程的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • vue3+vite assets動(dòng)態(tài)引入圖片的三種方法及解決打包后圖片路徑錯(cuò)誤不顯示的問題

    vue3+vite assets動(dòng)態(tài)引入圖片的三種方法及解決打包后圖片路徑錯(cuò)誤不顯示的問題

    這篇文章主要介紹了vue3+vite assets動(dòng)態(tài)引入圖片的幾種方式,解決打包后圖片路徑錯(cuò)誤不顯示的問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03
  • vue中@click綁定多個(gè)事件問題(教你避坑)

    vue中@click綁定多個(gè)事件問題(教你避坑)

    這篇文章主要介紹了vue中@click綁定多個(gè)事件問題(教你避坑),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • 在vue-cli3中使用axios獲取本地json操作

    在vue-cli3中使用axios獲取本地json操作

    這篇文章主要介紹了在vue-cli3中使用axios獲取本地json操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • vue.set() (this.$set)的用法及說明

    vue.set() (this.$set)的用法及說明

    這篇文章主要介紹了vue.set() (this.$set)的用法及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • 一篇文章帶你使用Typescript封裝一個(gè)Vue組件(簡(jiǎn)單易懂)

    一篇文章帶你使用Typescript封裝一個(gè)Vue組件(簡(jiǎn)單易懂)

    這篇文章主要介紹了使用Typescript封裝一個(gè)Vue組件,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • vue使用keep-alive進(jìn)行組件緩存方法詳解(組件不緩存問題解決)

    vue使用keep-alive進(jìn)行組件緩存方法詳解(組件不緩存問題解決)

    keep-alive包裹動(dòng)態(tài)組件時(shí),會(huì)緩存不活動(dòng)的組件實(shí)例,而不是銷毀它們,下面這篇文章主要給大家介紹了關(guān)于vue使用keep-alive進(jìn)行組件緩存方法(組件不緩存問題解決)的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • vue關(guān)閉瀏覽器退出登錄的實(shí)現(xiàn)示例

    vue關(guān)閉瀏覽器退出登錄的實(shí)現(xiàn)示例

    本文主要介紹了vue關(guān)閉瀏覽器退出登錄,一般都是根據(jù)根據(jù)beforeunload和unload這兩個(gè)事件執(zhí)行的。本文就詳細(xì)的介紹一下如何實(shí)現(xiàn),感興趣的可以了解一下
    2021-12-12
  • Vue3中關(guān)于getCurrentInstance的大坑及解決

    Vue3中關(guān)于getCurrentInstance的大坑及解決

    這篇文章主要介紹了Vue3中關(guān)于getCurrentInstance的大坑及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04

最新評(píng)論

九台市| 周宁县| 喀喇| 景洪市| 拜城县| 武城县| 乡宁县| 开鲁县| 淮北市| 油尖旺区| 青岛市| 定远县| 建阳市| 卢龙县| 台江县| 远安县| 南充市| 平和县| 甘南县| 长寿区| 东城区| 漳平市| 琼结县| 固镇县| 股票| 邛崃市| 金阳县| 太白县| 武邑县| 赣榆县| 温州市| 耒阳市| 筠连县| 黎平县| 县级市| 玛多县| 凤城市| 太谷县| 乌兰县| 慈利县| 麻阳|