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>
相关文章
|
4月前
|
自然语言处理 JavaScript 前端开发
一夜获千星!已获 1.7k+,Art Design Pro:Vue3 + Vite + TypeScript 打造的高颜值管理系统模板,这个让后端小哥直呼救命的后台系统
Art Design Pro 是一款基于 Vue 3、Vite 和 TypeScript 的高颜值后台管理系统模板,已获 1.7k+ 星标。项目专注于用户体验与视觉设计,支持主题切换、多语言、权限管理及图表展示等功能,内置常用业务组件,便于快速搭建现代化管理界面。其技术栈先进,开发体验流畅,适配多设备,满足企业级应用需求。项目地址:[GitHub](https://github.com/Daymychen/art-design-pro)。
579 11
|
5月前
|
JavaScript 前端开发 编译器
Vue与TypeScript:如何实现更强大的前端开发
Vue.js 以其简洁的语法和灵活的架构在前端开发中广受欢迎,而 TypeScript 作为一种静态类型语言,为 JavaScript 提供了强大的类型系统和编译时检查。将 Vue.js 与 TypeScript 结合使用,不仅可以提升代码的可维护性和可扩展性,还能减少运行时错误,提高开发效率。本文将介绍如何在 Vue.js 项目中使用 TypeScript,并通过一些代码示例展示其强大功能。
216 22
|
8月前
|
JavaScript 安全 前端开发
Gzm Design:开源神器!用 Vue3、Vite4、TypeScript 革新海报设计,免费开源的海报设计器,主流技术打造,轻松高效
海报设计在各个领域都有着广泛的应用,无论是商业广告、活动宣传还是个人创意表达。今天要给大家介绍一款免费开源的海报设计器——Gzm Design,它基于最新的主流技术开发,为用户提供了丰富的功能,让海报设计变得轻松又高效。
463 64
|
8月前
|
JavaScript 数据安全/隐私保护
Vue Amazing UI 组件库(Vue3+TypeScript+Vite 等最新技术栈开发)
Vue Amazing UI 是一个基于 Vue 3、TypeScript、Vite 等最新技术栈开发构建的现代化组件库,包含丰富的 UI 组件和常用工具函数,并且持续不断维护更新中。另外,组件库全量使用 TypeScript,支持自动按需引入和 Tree Shaking 等,能够显著提升开发效率,降低开发成本。
480 5
Vue Amazing UI 组件库(Vue3+TypeScript+Vite 等最新技术栈开发)
|
12月前
|
JavaScript 安全 开发工具
在 Vue 3 中使用 TypeScript
【10月更文挑战第3天】
|
JavaScript 前端开发 IDE
Vue学习笔记5:用Vue的事件监听 实现数据更新的实时视图显示
Vue学习笔记5:用Vue的事件监听 实现数据更新的实时视图显示
|
JavaScript 前端开发 API
Vue学习笔记4:用reactive() 实现数据更新的实时视图显示
Vue学习笔记4:用reactive() 实现数据更新的实时视图显示
|
JavaScript 前端开发
Vue学习笔记8:解决Vue学习笔记7中用v-for指令渲染列表遇到两个问题
Vue学习笔记8:解决Vue学习笔记7中用v-for指令渲染列表遇到两个问题
|
JavaScript 前端开发 API
Vue学习笔记7:使用v-for指令渲染列表
Vue学习笔记7:使用v-for指令渲染列表
|
JavaScript 前端开发 安全
【技术革新】Vue.js + TypeScript:如何让前端开发既高效又安心?
【8月更文挑战第30天】在使用Vue.js构建前端应用时,结合TypeScript能显著提升代码质量和开发效率。TypeScript作为JavaScript的超集,通过添加静态类型检查帮助早期发现错误,减少运行时问题。本文通过具体案例展示如何在Vue.js项目中集成TypeScript,并利用其类型系统提升代码质量。首先,使用Vue CLI创建支持TypeScript的新项目,然后构建一个简单的待办事项应用,通过定义接口描述数据结构并在组件中使用类型注解,确保代码符合预期并提供更好的编辑器支持。
209 1

热门文章

最新文章