vue2/vue3 render函数和h函数以及table封装相关文章

本文展示了如何在Vue3中通过JSON数据来封装自定义的表单和表格组件。示例中,`TableCell`组件能够根据JSON配置进行初始化,并支持使用父组件注册的本地组件及自定义渲染函数。`TableCell`组件内部,通过JSX和`render`函数实现了内容的动态渲染,包括调用自定义渲染函数或使用自定义组件。同时,还给出了`MyTag`组件的实现,演示了如何在单元格内插入带有交互功能的组件。
摘要由CSDN通过智能技术生成

为什么写这个?

想找到以下几个问题的解决方案:

  • 封装JSON表单组件(完全通过JSON完成表单初始化),在表单组件内部怎么使用父组件中局部注册的组件
  • 封装JSON表格组件(完全通过JSON完成表格初始化),自定义单元格内容怎么实现

实现示例

实现方式:通过JSX以及render/h渲染函数来

示例

<!-- Demo.vue -->
<script lang="tsx" setup>
import { ref } from 'vue'
import TableCell from 'components/TableCell'
import MyTag from './MyTag.vue'

const myName = ref<string>('小三子')

function onChangeMyName() {
  myName.value = '大三子' + new Date().toString()
}
function customRender(tmpName: string) {
  return <div>不错:{tmpName}</div>
}
</script>

<template>
  <hr />
  <button @click="onChangeMyName">按钮</button>
  <hr />
  <TableCell :my-name="myName"></TableCell>
  <hr />
  <TableCell :my-name="myName" :custom-render="customRender"></TableCell>
  <hr />
  <TableCell :my-name="myName" :custom-tag="MyTag"></TableCell>
  <hr />
</template>
// TableCell.tsx
import { defineComponent, h } from 'vue'

export default defineComponent({
  name: 'TableCell',
  props: {
    myName: {
      type: String,
      required: false,
    },
    customRender: {
      type: Function,
      required: false,
    },
    customTag: {
      type: Object,
      required: false,
    },
  },
  render(context: any) {
    console.log('context', context)
    if (context.customRender) {
      return context.customRender(context.myName)
    } else if (context.customTag) {
      return h(context.customTag, { myName: context.myName })
    } else {
      return h('div', '你好' + context.myName)
    }
  },
})
<!--
MyTag.vue
-->

<script lang="ts" setup>
defineProps<{
  myName?: string
}>()
function onClick() {
  console.log('点击事件也是有效的')
}
</script>

<template>
  <div>
    <strong>我的标签</strong>
    <h3>{{ myName }}</h3>
    <el-button @click="onClick">Element Plus 按钮</el-button>
  </div>
</template>

<style lang="scss" scoped></style>

效果

在这里插入图片描述

参考文章

  1. VUE封装Table组件
  2. 拒绝!封装el-table,请别再用JSON数组来配置列了
  3. vue3-pro-table
  4. el-table-ts
  5. 函数式组件
  6. 记一个Vue渲染函数render的使用场景
  7. Vite + Vue3 使用TSX/JSX
  8. vue3使用jsx/tsx语法
  9. Vue3 setup render
  10. 用单元测试读懂 vue3 中的 defineComponent
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值