Jiang's Tech Journal

Jiang's Tech Journal

首页
分类
关于
Login →
Jiang's Tech Journal

Jiang's Tech Journal

首页 分类 关于
Login
  1. Home
  2. 前端
  3. 在Vue3中使用JSX

在Vue3中使用JSX

0
  • 前端
  • Published at 2024-11-13
  • Read 46 times
Jiang
Jiang
Table of Contents
No Table of Contents

在绝大多数情况下,Vue 推荐使用模板语法来创建应用。然而在某些使用场景下,我们真的需要用到 JavaScript 完全的编程能力。这时渲染函数就派上用场了。

如果你还不熟悉虚拟 DOM 和渲染函数的概念的话,请确保先阅读渲染机制章节。

要书写JSX的话需要安装 @vitejs/plugin-vue-jsx 包。

//vite.config.js

import vueJsx from '@vitejs/plugin-vue-jsx'

export default {
  plugins: [
    vueJsx({
      // options are passed on to @vue/babel-plugin-jsx
    }),
  ],
}

配置完成后新建一个 .jsx 文件就可以开始书写了。

但是呢,Vue 推荐使用模板语法来创建应用,我们为什么用JSX呢!

我们这个业务需要点击一个按钮,然后查看详情出现一个弹窗,这个弹窗会出现详情列表。

如果用模板语法的话,需要定义一个是否显示弹窗的变量,点击这个按钮之后,要根据数据ID请求相应的数据详情,并将数据赋值给一个变量,显示弹窗的变量赋值为True ,将请求回来的数据传入弹窗组件中再由组件v-for展示出来。

如果用JSX呢。

只需要创建一个JSX文件:

import { defineComponent, ref } from "vue";
import { ElDialog, ElTable, ElTableColumn, ElButton } from "element-plus";

//编辑涉及主播弹窗
export default defineComponent({
  name: "EditingInvolvesAnchors",
  props: {
    onClose: {
      type: Function,
      default: () => {},
    },
  },
  setup(props) {
    const dialogVisible = ref(true);

    const handleClose = (done) => {
      done();
      props.onClose();
    };

    const tableData = [
      {
        date: "2016-05-03",
        name: "Tom",
        address: "No. 189, Grove St, Los Angeles",
      },
      {
        date: "2016-05-02",
        name: "Tom",
        address: "No. 189, Grove St, Los Angeles",
      },
      {
        date: "2016-05-04",
        name: "Tom",
        address: "No. 189, Grove St, Los Angeles",
      },
      {
        date: "2016-05-01",
        name: "Tom",
        address: "No. 189, Grove St, Los Angeles",
      },
    ];

    const tableColumns = [
      { prop: "date", label: "利润名称" },
      { prop: "name", label: "金额" },
      { prop: "address", label: "日期" },
      { prop: "address", label: "状态" },
      { prop: "operation", label: "操作" },
    ];

    return () => (
      <ElDialog
        modelValue={dialogVisible.value}
        onUpdate:modelValue={(val) => (dialogVisible.value = val)}
        title="涉及主播"
        width="1000px"
        beforeClose={handleClose}
      >
        <ElTable data={tableData}>
          {tableColumns.map(({ prop, label }) => {
            return (
              <ElTableColumn prop={prop} label={label}>
                {{
                  default: (scope) => {
                    if (prop === "operation") {
                      return <ElButton type="danger">删除</ElButton>;
                    }
                    return scope.row[prop];
                  },
                }}
              </ElTableColumn>
            );
          })}
        </ElTable>
      </ElDialog>
    );
  },
});

然后在点击事件里面传入 数据ID,并且渲染这个弹窗

import EditingInvolvesAnchorsComponent from "./editingInvolvesAnchors.jsx";

const vnode = h(EditingInvolvesAnchorsComponent, {
    content: "id",
    onClose: () => {
      setTimeout(() => {
        render(null, container);
        container.remove();
      }, 500);
    },
  });
  render(vnode, container);
  document.body.appendChild(container);

这样,在父组件内不用定义多余的变量,直接用js就可以操作弹窗了。 简洁!

以上,完结,撒花~

Related Posts

【Vue】VueUse 中 createReusableTemplate 的妙用

在 Vue 3 开发中,虽然推荐使用模板语法,但在封装高阶组件或使用特定 UI 库(如 Naive UI、Element Plus、Ant Design Vue)的表格组件时,我们往往需要编写 Render 函数(h 函数)或使用 JSX/TSX 来处理复杂的自定义列渲染。 对于不熟悉渲染函数 AP

【Vue】 组件内模板复用技巧:createReusableTemplate

在 Vue 组件开发中,我们经常遇到部分模板内容需要在同一组件内多次复用的场景。传统的解决方案如提取子组件、v-for 循环或直接复制粘贴,在某些简单场景下可能显得过于繁琐或冗余。 本文介绍一种利用 Vue 3 组合式 API 和渲染函数特性实现的“局部模板复用”技巧,类似于模板引擎中的“宏(Mac

【Vue】组件二次封装技巧

日常任务开发过程中避免不了进行 UI 组件库部分组件的二次封装使用,记录下长期开发过程中积累的一些经验和网络学习的新技巧,组件二次封装需要解决的无非就是属性 props 如何透传出去,如何复用原有组件的插槽,以及如何调用原组件暴露的方法,这里以比较热门的 UI 框架 Element Plus 为例。

【vue-admin-kit】配置驱动的 Vue 3 后台管理组件工具套件

📖 在线文档:https://vue-admin-kit.jiang.in/ 前言 在企业级后台管理系统开发中,CRUD 页面占据了大量的开发工作。搜索表单、数据表格、新增/编辑弹窗、详情展示……这些重复性的工作不仅耗时,还容易产生不一致的代码风格。 vue-admin-kit 正是为解决这一痛点

[CSS] 移除元素焦点状态

padding: '0' - 移除内边距 border: 'none' - 移除边框 outline: 'none' - 移除焦点时的轮廓线(这是关键!) boxShadow: 'none' - 移除可能的阴影效果

Node版本切换

在前端开发中,Node.js 是开发工具链的核心之一。它不仅支撑着前端构建流程,很多后端、脚本任务也依赖它。但随着 Node.js 的版本更新频繁,不同项目对版本的要求也各不相同,开发者很容易遇到这种问题: 一个项目要 Node.js 14,另一个却必须跑在 Node.js 18; 一不小心全局版本

Table of Contents
No Table of Contents
Copyright © 2024 your company All Rights Reserved. Powered by Halo.