Vue中如何正确的使用jsx语法书写代码

工程化:vite4和vue3用jsx封装移动端的tabbar组件 用jsx封装的一款tabbar组件。 阅读详情

一、首要了解vue的render函数?

我们得知道有些特定的场景下 我们是需要去用到render函数去渲染vue模板的,那么何种场景呢?
在这里我可以找两个例子
在这里插入图片描述
当然我们也可一看一下element的源码 package.json中是否存在这两个依赖
在这里插入图片描述
以下是官网采用的两个依赖(其实两者是一样的 只不过由于版本问题)
在这里插入图片描述
当然这两个依赖也同样是我们在vue中书写jsx必不可少的两个依赖

回到render函数上面来,首先我们要了解的是什么是render函数,那么我们必须要知道的是什么?什么是虚拟dom,那么什么是虚拟dom呢?

1、什么是虚拟dom?

其实这是一个屡见不鲜的面试题,用一句话来概括,用javascript的方式书写出来的dom节点就是虚拟dom,在vue中虚拟dom也就是我们所说的vnode等同于虚拟dom。

官网给出的我们使用render书写渲染函数,其实我们要理解的是什么?

因为vue是虚拟dom,所以在拿到template模板时也要转译成vnode的函数,而用render函数构建dom,vue就免去了转译的过程,我们在一些特定场景下去使用render书写起来性能方面能得到更进一步的提升。

看一下官网使用render函数书写虚拟dom

// template 模板写法
<script type="text/x-template" id="anchored-heading-template">
  <h1 v-if="level === 1">
    <slot></slot>
  </h1>
  <h2 v-else-if="level === 2">
    <slot></slot>
  </h2>
  <h3 v-else-if="level === 3">
    <slot></slot>
  </h3>
  <h4 v-else-if="level === 4">
    <slot></slot>
  </h4>
  <h5 v-else-if="level === 5">
    <slot></slot>
  </h5>
  <h6 v-else-if="level === 6">
    <slot></slot>
  </h6>
</script>
<script>
Vue.component('anchored-heading', {
  template: '#anchored-heading-template',
  props: {
    level: {
      type: Number,
      required: true
    }
  }
})
</script>



// createElement 虚拟dom写法
<script>
Vue.component('anchored-heading', {
  render: function (createElement) {
    return createElement(
      'h' + this.level,   // 标签名称
      this.$slots.default // 子节点数组
    )
  },
  props: {
    level: {
      type: Number,
      required: true
    }
  }
})
</script>

这样看起来的话好像反而要比template模板写法来的更简洁些,但是如果数据量一旦多起来呢?我们不免要考虑的一个问题就是不如标签写法来的直观。

当然有了解react的同学就会说了 那react也同样是render函数进行渲染 而且里面写的是jsx模板标签,那么我们可不可以在vue的render里面书写jsx模板标签呢?

此时其实也就引出了我们今天的主题,如何在vue的render中去书写jsx标签。

2、如何在render中使用jsx语法进行书写?

在这里插入图片描述
我们来到 git地址

同样官网会给出我们解答
在这里插入图片描述

npm install @vue/babel-preset-jsx @vue/babel-helper-vue-jsx-merge-props

babel.config.js

module.exports = {
  presets: ['@vue/babel-preset-jsx'],
}

其实就是像这样(因为我这边使用的是vueCli已经携带了babel所以已经有了这个文件)
在这里插入图片描述
那么其实这个时候,我们的jsx就已经安装好了,此时我们就可以愉快的在render中书写jsx来进行编码了。

这个时候我们也同样将git上面的几个案例搬运过来

3、写法示例
// 书写jsx模板(外层单个标签 不要retrun两个标签)
render() {
  return <p>hello</p>
}

// 具有动态属性
render() {
  return <p>hello { this.message }</p>
}

// 单闭合标签
render() {
  return <input />
}

// 引入组件
import MyComponent from './my-component'
export default {
  render() {
    return <MyComponent>hello</MyComponent>
  },
}

// 带有属性
render() {
  return <input type="email" />
}

// 带有动态属性(这里面的this指向的便是当前的vue实例)
render() {
  return <input
    type="email"
    placeholder={this.placeholderText}
  />
}

// 带有多个动态属性  object解构式写法
render() {
  const inputAttrs = {
    type: 'email',
    placeholder: 'Enter your email'
  }
  return <input {...{ attrs: inputAttrs }} />
}

// 指令v-model
render() {
  return <input vModel={this.newTodoText} />
}

// 指令v-model 修饰符trim 去空格
render() {
  return <input vModel_trim={this.newTodoText} />
}

// 事件@click 
render() {
  return <input vOn:click={this.newTodoText} />
}

// 事件@click 移除冒泡以及默认行为
render() {
  return <input vOn:click_stop_prevent={this.newTodoText} />
}

// 指令v-html
render() {
  return <p domPropsInnerHTML={html} />
}

当然我们同样是可以使用想onClick = {this.xxx}这种方式去进行书写的。

二、案例编写

<!--
 * @Author: your name
 * @Date: 2021-04-29 11:29:18
 * @LastEditTime: 2021-04-29 15:23:33
 * @LastEditors: Please set LastEditors
 * @Description: In User Settings Edit
 * @FilePath: /hx/packages/tbTag/main.vue
-->
<script>
export default {
  name: "tbTag",

  render(h) {
    const data = {
      props: {
        ...this.$attrs,
      },
      on: {
        ...this.$listeners,
      },
    };

    // 使用jsx 模板插槽的话  用default[0]即可
    return (
      <div {...data} style={this.color ? `background-color:${this.color}` : ""} class={`tb-tag tag  ${this.tbType} ${this.tbSize} ${this.tbEffect}`}>
        {this.$slots.default[0]}{" "}
        <i
          vOn:click_stop={() => {
            this.$emit("close");
          }}
          class="iconfont icon-close-bold bold"
          style="margin-left:2px;"
        ></i>
      </div>
    );
  },
  data() {
    return {
      tbSize: "tag_small",
      tbType: "",
      tbEffect: "",
      isCloseble: "",
    };
  },
  props: {
    // 颜色
    type: {
      type: String,
      default: "primary",
    },
    // 大小
    size: {
      type: String,
      default: "small",
    },
    // 三种样式一种是  light也就是默认  发浅色  dark:实心   plain:镂空
    effect: {
      type: String,
      default: "light",
    },
    // 自定义背景颜色
    color: {
      type: String,
      default: "",
    },
    // 关闭标签
    closable: {
      type: Boolean,
      default: false,
    },
  },
  created() {
    this.Ptype();
    this.Psize();
    this.Peffect();
    this.Pclosable();
  },
  methods: {
    // 页面加载判断当前标签是否存在关闭小图标
    Pclosable() {
      const vm = this;
      if (vm.closable) {
        vm.isCloseble = true;
      } else {
        vm.isCloseble = false;
      }
    },
    // 页面加载判断当前是何种样式
    Peffect() {
      const vm = this;
      if (vm.effect == "light") {
        vm.tbEffect = "tag_effect_light";
      } else if (vm.effect == "dark") {
        vm.tbEffect = "tag_effect_dark";
      } else if (vm.effect == "plain") {
        vm.tbEffect = "tag_effect_plain";
      }
    },
    // 页面加载判断当前按钮大小
    Psize() {
      const vm = this;
      if (vm.size == "mini") {
        vm.tbSize = "tag_mini";
      } else if (vm.size == "small") {
        vm.tbSize = "tag_small";
      } else if (vm.size == "medium") {
        vm.tbSize = "tag_medium";
      }
    },
    // 页面加载判断当前按钮类型
    Ptype() {
      const vm = this;
      if (vm.type == "primary") {
        vm.tbType = "tag_primary";
      } else if (vm.type == "success") {
        vm.tbType = "tag_success";
      } else if (vm.type == "info") {
        vm.tbType = "tag_info";
      } else if (vm.type == "warning") {
        vm.tbType = "tag_warning";
      } else if (vm.type == "danger") {
        vm.tbType = "tag_danger";
      }
    },
  },
};
</script>
<style scoped>
.bold {
  cursor: pointer;
}
.tag {
  margin: 0 2px;
  border-radius: 4px;
  background: #ffffff;
}
/* .tag:focus,
.tag:hover {
  color: #409eff;
  border-color: #c6e2ff;
  background-color: #ecf5ff;
} */

/* size 样式 */
.tag_mini {
  height: 30px;
  font-size: 12px;
  display: inline-block;
  border: 1px solid #eeeeee;
  line-height: 30px;
  text-align: center;
  padding: 0 16px;
  /* cursor: pointer; */
}
.tag_small {
  height: 35px;
  font-size: 14px;
  display: inline-block;
  border: 1px solid #eeeeee;
  line-height: 35px;
  text-align: center;
  padding: 0 20px;
  /* cursor: pointer; */
}
.tag_medium {
  height: 40px;
  font-size: 16px;
  display: inline-block;
  border: 1px solid #eeeeee;
  line-height: 40px;
  text-align: center;
  padding: 0 24px;
  /* cursor: pointer; */
}
/* effect 按钮样式 */
.tag_primary {
  color: #409eff;
  background-color: #ecf5ff;
  border-color: #d9ecff;
}
.tag_success {
  color: #67c23a;
  background-color: #f0f9eb;
  border-color: #e1f3d8;
}
.tag_info {
  color: #909399;
  background-color: #f4f4f5;
  border-color: #e9e9eb;
}
.tag_warning {
  color: #e6a23c;
  background-color: #fdf6ec;
  border-color: #faecd8;
}
.tag_danger {
  color: #f56c6c;
  background-color: #fef0f0;
  border-color: #fde2e2;
}

/* .tag_primary:focus,
.tag_primary:hover {
  color: #409eff;
  background-color: #ecf5ff;
  border-color: #d9ecff;
}

.tag_success:focus,
.tag_success:hover {
  color: #67c23a;
  background-color: #f0f9eb;
  border-color: #e1f3d8;
}

.tag_info:focus,
.tag_info:hover {
  color: #909399;
  background-color: #f4f4f5;
  border-color: #e9e9eb;
}

.tag_warning:focus,
.tag_warning:hover {
  color: #e6a23c;
  background-color: #fdf6ec;
  border-color: #faecd8;
}

.tag_danger:focus,
.tag_danger:hover {
  color: #f56c6c;
  background-color: #fef0f0;
  border-color: #fde2e2;
} */

.tag_primary.tag_effect_dark {
  color: #fff;
  background-color: #409eff;
  border-color: #409eff;
}
/* .tag_primary.tag_effect_dark:focus,
.tag_primary.tag_effect_dark:hover {
  background: #66b1ff;
  border-color: #66b1ff;
  color: #fff;
} */
.tag_success.tag_effect_dark {
  color: #fff;
  background-color: #67c23a;
  border-color: #67c23a;
}
/* .tag_success.tag_effect_dark:focus,
.tag_success.tag_effect_dark:hover {
  background: #85ce61;
  border-color: #85ce61;
  color: #fff;
} */

.tag_info.tag_effect_dark {
  color: #fff;
  background-color: #909399;
  border-color: #909399;
}
/* .tag_info.tag_effect_dark:focus,
.tag_info.tag_effect_dark:hover {
  background: #a6a9ad;
  border-color: #a6a9ad;
  color: #fff;
} */
.tag_warning.tag_effect_dark {
  color: #fff;
  background-color: #e6a23c;
  border-color: #e6a23c;
}
/* .tag_warning.tag_effect_dark:focus,
.tag_warning.tag_effect_dark:hover {
  background: #ebb563;
  border-color: #ebb563;
  color: #fff;
} */
.tag_danger.tag_effect_dark {
  color: #fff;
  background-color: #f56c6c;
  border-color: #f56c6c;
}
/* .tag_danger.tag_effect_dark:focus,
.tag_danger.tag_effect_dark:hover {
  background: #f78989;
  border-color: #f78989;
  color: #fff;
} */
.tag_primary.tag_effect_plain {
  color: #409eff;
  background: #ffffff;
  border-color: #b3d8ff;
}
/* .tag_primary.tag_effect_plain:focus,
.tag_primary.tag_effect_plain:hover {
  background: #409eff;
  border-color: #409eff;
  color: #fff;
} */
.tag_success.tag_effect_plain {
  color: #67c23a;
  background: #ffffff;
  border-color: #c2e7b0;
}
/* .tag_success.tag_effect_plain:focus,
.tag_success.tag_effect_plain:hover {
  background: #67c23a;
  border-color: #67c23a;
  color: #fff;
} */
.tag_info.tag_effect_plain {
  color: #909399;
  background: #ffffff;
  border-color: #d3d4d6;
}
/* .tag_info.tag_effect_plain:focus,
.tag_info.tag_effect_plain:hover {
  background: #909399;
  border-color: #909399;
  color: #fff;
} */
.tag_warning.tag_effect_plain {
  color: #e6a23c;
  background: #ffffff;
  border-color: #f5dab1;
}
/* .tag_warning.tag_effect_plain:focus,
.tag_warning.tag_effect_plain:hover {
  background: #e6a23c;
  border-color: #e6a23c;
  color: #fff;
} */
.tag_danger.tag_effect_plain {
  color: #f56c6c;
  background: #ffffff;
  border-color: #fbc4c4;
}
/* .tag_danger.tag_effect_plain:focus,
.tag_danger.tag_effect_plain:hover {
  background: #f56c6c;
  border-color: #f56c6c;
  color: #fff;
} */
</style>

引入调用即可。
在这里插入图片描述

vue的jsx写法记录 通过本文, 你可以学到一些vue中jsx的语法。 vue更加推荐使用模板开发组件,但是在一些基础组件开发中,为了获取js的完全编程能力,不可避免需要使用一些jsx语法,而官方vue jsx对vue特有的语法糖这方面的文档特别少, 本文记录一些本人在开发过程中使用jsx的经验和思考。 整体上来看,由于vue的createElement跟react的createElement有区别,导致jsx的写法也有一些区别.但整体上还是符合react的jsx,react jsx进阶的语法。 如果需要了解vue jsx特. 阅读详情

相关推荐

Vue—JSX详解

一、概述 JSX是Javascript和XML结合的一种格式。React发明了JSX,利用html语法来创建虚拟DOM,当遇到 < JSX就当html解析,遇到{就当JS解析。 vue-cli3和4创建的Vue工程,可以直接使用JSX语法。JSX语法要求删除template标签,用render代替。 二、详解 如下代码所示,写了很多冗余的slot。 <template> <div> <h1 v-if="id===1"> .

雷雨天的雷胖子 2203

@vue/babel-preset-jsx 和 @vue/babel-plugin-jsx

这两个插件,乍一看很像,功能也是一致的——让vue支持jsx语法 那么他们两到底有什么区别呢? 这里就给大家详细说一说 一、背景: 在使用脚手架构建项目的时候,拉取下来的项目模版,不能够支持jsx的语法,通过排查发现项目使用的是@vue/babel-plugin-jsx,随即修改为@vue/babel-preset-jsx后即可以正常解析 二、@vue/babel-plugin-jsx 该组件只适用于vue3.x 使用: npm install @vue/babel-plugi..

rolinabc的博客 8661

【近源攻击】badusb制作

BadUSB是利用伪造HID设备执行攻击载荷的一种攻击方式。HID(Human InterfaceDevice)设备通常指的就是键盘鼠标等与人交互的设备,用户插入BadUSB,就会自动执行预置在固件中的恶意代码。BadUsb插入后,会模拟键盘鼠标对电脑进行操作,通过这些操作打开电脑的命令终端,并执行一条命令,这条命令将从指定网址下载其他代码并于后台静默运行。这些代码功能包括:窃取信息、反弹shell、发送邮件等,从而实现控制目标机或者窃取信息的目的。

qinjilll的博客 2550

推荐使用:Babel Preset JSX - 让Vue JSX开发更便捷

推荐使用:Babel Preset JSX - 让Vue JSX开发更便捷 在现代前端开发中,Vue.js已经成为一个极为流行的框架,而JSX则为编写Vue组件提供了更加直观的语法。现在,我们向您推荐一款强大的工具——Babel Preset JSX,它是一个可配置的Babel预设,专门用于添加对Vue JSX的支持。 1. 项目介绍 Babel Preset JSX 是由Vue.js团队维护的一...

gitblog_00087的博客 702

three.js 载入 3D 模型的方法

三维模型的加载器ColladaLoader模型加载器。GLTFLoader模型加载器。OBJLoader模型加载器。FBXLoader模型加载器。

w418856的博客 4362

9 海康视觉平台VisionMaster 上手系列:典型案例之螺丝机案例

海康视觉平台VisionMaster 上手系列:典型案例之螺丝机案例 快速入门 工业机器视觉 机器视觉

HuangGong2022的博客 7177

手把手教你在 Vue 中使用 JSX,不怕学不会!【建议收藏】

学习这篇文章希望您已经具备以下知识: vue.js的基本使用 对前端三件套(html、css、js)已经可以熟练使用了 文末有配套demo代码:点我直达 JSX是什么 JSX 是一种 Javascript 的语法扩展,JSX = Javascript + XML,即在 Javascript 里面写 XML,因为 JSX 的这个特性,所以他即具备了 Javascript 的灵活性,同时又兼具 html 的语义化和直观性。(个人建议灵活度强的部分组件可以用JSX来代替,整个项目JSX属实没必要) XM.

纸飞机博客 1万+

保姆级教程:在ESXi 8.0上为NVIDIA ConnectX-5/6网卡开启SR-IOV(从BIOS到虚拟机配置)

本文提供在ESXi 8.0上为NVIDIA ConnectX-5/6网卡开启SR-IOV的详细教程,涵盖BIOS设置、固件配置、驱动优化及虚拟机部署。通过SR-IOV技术,显著提升虚拟化环境中的网络性能,适用于高性能计算、AI训练等场景。

weixin_26934905的博客 455

在Vue中使用JSX的正确姿势

在Vue中使用JSX的正确姿势 ant-design-vue开源了一段时间后,收到了一些反馈,尤其是Form组件上线后,很多用户对JSX的使用感到迷惑和不习惯,为此专门介绍下Vue JSX的使用姿势及注意事项。 Form组件的自动收集校验功能需要在JSX下使用,当然如果不需要自动收集校验,你依然可以使用template Vue 推荐在绝大多数情况下使用template来创建你的 H...

tzllxya的博客 3万+

团体程序设计天梯赛竞赛题--登顶题【L3-039 攀岩】

登顶级 3 道题,每道题 30 分,满分为 90 分。

Pretty Boy Fox的博客 654

利用人工神经网络在Abaqus中实现本构模型的网格粗化计算框架:详细指南与实践

在这篇文章中,我们详细介绍了如何在Abaqus中实现基于人工神经网络(ANN)的本构模型以进行网格粗化的计算框架。我们通过两个主要模块——数据生成器模块和ANN训练模块,实现了这一计算框架,并将训练好的ANN集成到Abaqus的用户材料子程序(UMAT)中,创建了一个基于ANN的本构模型。我希望这篇文章能帮助到那些希望在Abaqus中实现基于ANN的本构模型的读者,同时,我也非常欢迎大家提出宝贵的意见和建议,让我们共同进步。

qq_38334677的博客 1716

Vue2 + JSX使用总结

Vue2 + JSX使用总结

baidu_33164415的博客 4039

把复杂计算推到数据库里:ABAP CDS View Table Function 从原理到落地实践

摘要:本文深入解析ABAP CDS Table Function技术,重点探讨其在复杂业务场景下的应用价值。当CDS View无法满足窗口函数、递归计算等高级需求时,Table Function通过结合CDS类型系统与AMDP的数据库原生计算能力,成为关键解决方案。文章详细介绍了Table Function的架构设计(CDS实体声明+AMDP实现)、客户端处理机制、开发传输流程中的注意事项,并通过航班数据示例展示最小实现闭环。这项技术特别适用于需要将复杂计算下推到数据库层的场景,能显著提升RAP和OData

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2298

Vue中的JSX语法详解

JSX是一种Javascript的语法扩展,即具备了Javascript的全部功能,同时又兼具html的语义化和直观性。它可以让我们在JS中写模板语法上面这段代码既不是 HTML 也不是字符串,被称之为 JSX,是 JavaScript 的扩展语法。JSX 可能会使人联想到模板语法,但是它具备 Javascript 的完全编程能力。

前端工程师 · Vue 生态深耕者,专注多端与工程化 6276

SAP-ABAP:SAP基础数据校验工具开发系列博客(共5篇) 第一篇:需求梳理与架构设计:从零搭建SAP主数据校验能力底座

摘要: 本系列博客介绍SAP主数据校验工具的开发和设计,旨在解决物料、供应商、客户等主数据录入不规范、关联缺失和合规性问题。第一篇聚焦需求梳理与架构设计,提出分层技术架构(展示层、业务逻辑层、数据访问层),支持实时校验和批量校验两种模式,并详细说明规则引擎设计、SAP系统对接方案及权限管控逻辑。后续篇章将深入规则引擎实现、接口对接、结果可视化和性能优化,帮助构建集中式、可配置的主数据校验能力,提升SAP数据质量。

baidu_35680696的博客 330

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

在Vue 中使用 JSX 语法

在Vue 中使用 JSX 语法

dreamingbaobei的博客 5492

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【jsx开发Vue】在Vite+Vue3.0中使用jsx语法开发。

所有内容首发微信公众号【WEB前端李志杰】,未经允许禁止转载! 可能大家要问我为什么要使用jsx语法开发Vue? 首先要说明的是:个人认为jsx语法和模板语法并不存在优劣之分,在实际项目中应该优先选择开发人员所擅长的语法进行开发。 那么、接下来再说说在Vue开发中为什么要使用jsx语法? 第一点、jsx语法可以更好地跟Typescript结合; 第二点、在阅读UI框架源码时,发现在知名UI组件库Ant Design Vue跟Naive UI皆使用tsx语法开发。 接下来大家可能又要问了tsx语法跟jsx又有

WEB前端李志杰 9626

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

在vue3中使用jsx语法

背景 vue3项目中 使用composition-api配合hooks形式,按业务分离,逻辑更清晰,维护更方便; 由于template模板语法受vue文件格式限制,在hooks函数中需要return太多变量,维护麻烦; 使用在hooks文件里面使用jsx代替template就可以解决这类问题。 语法 ::: tip 下面主要通过对比jsx和template不同语法,来实现同样的功能 ::: 一丶 普通内容 普通内容常量,写法是一样的 //jsx 写法 setup() { return ()=&g

希望有一天 2万+

vue.js使用JSX语法扩展

JavaScript XML JSX 是一个看起来很像 XML 的 JavaScript 语法扩展 vue 4.2.3 可以直接使用jsx语法 vue -V @vue/cli 4.2.3 vue create vue-jsx-demo src/App.vue <template> <div id="app"> <HelloWorld /&g...

彭世瑜的博客 1566

Vue如何支持JSX语法

文章目录介绍传统的createElement方法使用jsx语法使用示例写法注意 介绍 通常开发vue我们使用的是模板语法,其实还有和react相同的语法,那就是render函数,同样支持jsx语法。 Vue 的模板实际是编译成了 render 函数。 以下是普遍的说明文档,文末是作者的示例。 参考文献:vue.js官网 传统的createElement方法 createElement( 'anc...

Tankic的博客 4844

React基础-JSX语法介绍

我们先来看一段代码// 定义根组件 const element = < div > Hello World < / div > // 渲染根组件 const app = ReactDOM . createRoot(document . querySelector("#app")) app . render(element)这段element变量的声明右侧赋值的标签语法是什么呢?它不是一段字符串(因为没有使用引号包裹);它看起来是一段HTML元素,但是我们能在js中直接将HTML元素赋值给一个变量吗?

m0_71485750的博客 8381

什么是Vue的JSX语法?如何使用JSX语法?

JSX是一种JavaScript的语法扩展,它可以让我们在JavaScript代码中编写类似于HTML的标记语言。在React中,我们通常使用JSX语法来编写组件的模板。Vue也支持使用JSX语法来编写组件。JSX语法更加灵活,可以在JavaScript代码中直接使用JavaScript表达式。JSX语法更加直观,可以更容易地理解组件的结构和行为。JSX语法更加易于扩展,可以使用各种JavaScript库和框架来扩展其功能。

IT徐师兄 2499

在vue安装jsx依赖包实现支持jsx语法

1、首先安装依赖: npm install postcss-loader autoprefixer babel-loader babel-core 2、在 .babelrc文件中修改: 把 "presets": ["env", "stage-2"], "plugins": ["transform-vue-jsx", "transform-es2015-modules-commo..

dengzy 5984

如何在Vue中书写JSX

简介 Vue中可以通过render函数代替template来获得完全的JavaScript编程能力。Vue官网上锚点标题的例子,说明了render函数在某些场景下可以有效地简化代码。我们可以通过createElement函数来编写render函数,但是createElement的写法过于繁琐,逻辑稍微复杂一点就会产生一堆代码,而且不易阅读。官方文档中指出可以通过Babel插件,在render函数...

weixin_34290631的博客 5880

如何使用webpack在vue项目中写jsx语法

本文主要给大家介绍的是关于利用jsx写vue组件,下面话不多说,来一起看看详细的介绍吧。 我们平常写vue的组件时,一般都是用的是模版,这种方式看起来比较简洁,而且vue作者也推荐使用这个方式,但是这种方式也有一些它的弊端,例如模版调试麻烦,或者在一些场景下模版描述可能没那么简单和方便。 下面我们要讲的是如何在vue里面写jsx,知道react的人应该都知道jsx,jsx的一个特性

itKingOne的博客 2万+
上一篇: 跳转页面下载文件需要附带Token请求头,如何实现ajax下载?
下一篇: display设置显示隐藏,transition过渡不起效果,采用opacity+visibility+dispaly解决问题
归来巨星
归来巨星 新星创作者: 前端开发技术领域 新星创作者: 前端开发技术领域
博客等级 码龄7年 5391粉丝 95原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

归来巨星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值