Vue3+TypeScript学习笔记(三十三)

简介: 本节记录函数式编程——h函数相关内容

首先我们回顾一下在脚本中利用createVNode和render函数创建Vue节点的方法

<template></template>

<script setup lang="ts">
import { ref, reactive, createVNode, render } from 'vue'

// 类型、配置项、内容
const div = createVNode('div', { id: 'foo' }, '小满')

// 虚拟DOM、要插入的位置
render(div, document.body)
</script>

<style scoped></style>

这种方法可以很方便地创建节点,样式可以使用tailwindcss(好像不能用普通css)。不过以下这种h函数提供了全新的方法(仍需借助tailwindcss)

<template>
    <Btn @on-click="getBtn" text="小满的帽子"> </Btn>
</template>

<script setup lang="ts">
import { ref, reactive, h } from 'vue'
type Props = {
    text: string
}

// 要定义的节点名称
const Btn = (props: Props, ctx: any) => {
    return h(
        'div',
        {
            class: [
                'rounded',
                'bg-green-500',
                'text-gray-50',
                'text-center',
                'p-1.5',
            ],
            id: ['a'],
      // 这里的onClick指的是原生事件,意为当Btn标签被点击时触发onClick的回调函数
            onClick: () => {
                ctx.emit('on-click', '开枪')
            },
        },
        props.text
    )
}
const getBtn = (str: string) => {
    console.log(str)
}
</script>

<style scoped></style>

如图,要定义的节点不再是函数的返回值,它本身就是一个函数。这个函数接收两个变量(props和ctx),props是从模板当中获取到的数据,ctx中包含了emit、slots等vue常用的函数,h函数的参数列表和createVNode相同,都是标签类型{string}--id、类名、事件等标签属性{配置对象}---标签中展示的内容
除上述用法外,标签中也可以定义插槽,只需要在上述模板的基础上将props.text改为ctx.slots.插槽名()即可

<template>
    <Btn @on-click="getBtn" text="小满的帽子">
<!--     这里填写对应的插槽名称 -->
        <template #default>
            小满要拔剑了!
        </template>
    </Btn>
</template>

<script setup lang="ts">
import { ref, reactive, h } from 'vue'
type Props = {
    text?: string
}

// 要定义的节点名称
const Btn = (props: Props, ctx: any) => {
    return h(
        'div',
        {
            class: [
                'rounded',
                'bg-green-500',
                'text-gray-50',
                'text-center',
                'p-1.5',
            ],
            id: ['a'],
            onClick: () => {
                ctx.emit('on-click', '开枪')
            },
        },
        ctx.slots.default()
    )
}
const getBtn = (str: string) => {
    console.log(str)
}
</script>

<style scoped></style>
相关文章
|
3月前
|
JavaScript 前端开发 IDE
[译] 用 Typescript + Composition API 重构 Vue 3 组件
[译] 用 Typescript + Composition API 重构 Vue 3 组件
[译] 用 Typescript + Composition API 重构 Vue 3 组件
|
28天前
|
JavaScript 安全 开发工具
在 Vue 3 中使用 TypeScript
【10月更文挑战第3天】
|
2月前
|
JavaScript 前端开发 IDE
Vue学习笔记5:用Vue的事件监听 实现数据更新的实时视图显示
Vue学习笔记5:用Vue的事件监听 实现数据更新的实时视图显示
|
2月前
|
JavaScript 前端开发 API
Vue学习笔记4:用reactive() 实现数据更新的实时视图显示
Vue学习笔记4:用reactive() 实现数据更新的实时视图显示
|
2月前
|
JavaScript 前端开发
Vue学习笔记8:解决Vue学习笔记7中用v-for指令渲染列表遇到两个问题
Vue学习笔记8:解决Vue学习笔记7中用v-for指令渲染列表遇到两个问题
|
2月前
|
JavaScript 前端开发 API
Vue学习笔记7:使用v-for指令渲染列表
Vue学习笔记7:使用v-for指令渲染列表
|
3月前
|
JavaScript API
如何使用Vue 3和Type Script进行组件化设计
【8月更文挑战第16天】如何使用Vue 3和Type Script进行组件化设计
41 3
|
3月前
|
JavaScript API
如何使用Vue 3和Type Script进行组件化设计
【8月更文挑战第16天】如何使用Vue 3和Type Script进行组件化设计
55 1
|
3月前
|
JavaScript 前端开发 安全
【技术革新】Vue.js + TypeScript:如何让前端开发既高效又安心?
【8月更文挑战第30天】在使用Vue.js构建前端应用时,结合TypeScript能显著提升代码质量和开发效率。TypeScript作为JavaScript的超集,通过添加静态类型检查帮助早期发现错误,减少运行时问题。本文通过具体案例展示如何在Vue.js项目中集成TypeScript,并利用其类型系统提升代码质量。首先,使用Vue CLI创建支持TypeScript的新项目,然后构建一个简单的待办事项应用,通过定义接口描述数据结构并在组件中使用类型注解,确保代码符合预期并提供更好的编辑器支持。
81 0
|
3月前
|
JavaScript 前端开发 安全
立等可取的 Vue + Typescript 函数式组件实战
立等可取的 Vue + Typescript 函数式组件实战