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

手把手教你解决uniapp中esbuild版本冲突问题(Mac版专属指南)

本文是针对Mac平台uniapp开发者的专属指南,详细解析了运行项目时常见的`Cannot start service`错误,即esbuild的Host版本与binary版本不匹配问题。文章从错误根源入手,提供了从快速应急处理到彻底根治的完整解决方案,包括手动替换二进制文件、锁定依赖版本、清理缓存及优化工具链配置,旨在帮助开发者高效解决版本冲突,恢复并稳定开发环境。

i0j1k2l3m的博客 459

推荐使用: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

西门子PLC实战:基于1200/1500的工业物联网MQTT通讯全解析

本文详细解析了如何在西门子S7-1200/1500系列PLC上实现工业物联网MQTT通讯。通过从硬件准备、网络配置到TIA Portal中MQTT_Client功能块的实战编程,手把手指导工程师打通车间数据桥梁,解决信息孤岛问题,实现PLC数据高效上云或设备间互联。

whisky的博客 1091

跨境TRS投资操作指南与系统解决方案

3 点击【申请 TRS 账户】,查看风险披露,录入账户参数、确定录入的参数信息,进行身份验证,输入验证码,TRS 账户开户申请已提交,后台对已提交的 TRS 开户申请进行审核,审核成功后,短信邮箱提醒,进行登录;2.点击【申请TRS账户】,查看风险披露,录入账户参数、确定录入的参数信息,进行身份验证,输入验证码,TRS账户开户申请已提交,后台对已提交的TRS开户申请进行审核,审核成功后,短信邮箱提醒,进行登录;4)更广泛的投资选择:相比A股通,TRS可以交易更多的A股标的,提供了更广泛的投资选择。

2401_85487119的博客 2853

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

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

纸飞机博客 1万+

1.1.4 运用防火墙实现入侵防御

摘要:本文详细介绍了某公司网络拓扑中防火墙FW1的配置过程。主要内容包括:1)通过web界面登录防火墙;2)配置三个接口的IP地址及所属安全区域;3)创建两个入侵防御配置文件(anti_untrust和anti_trust);4)配置安全策略untrust2dmz和trust2dmz,分别允许公网/内网访问WWW服务器;5)保存配置。操作步骤配有详细截图说明,涉及接口配置、安全区域划分、入侵防御策略设定等关键环节,最终实现内外网对服务器Server1的安全访问控制。(149字)

Ljs040411的博客 2135

在Vue中使用JSX的正确姿势

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

tzllxya的博客 3万+

vLLM专题(七)-支持的模型列表

vLLM支持跨多种任务的生成式和池化模型。如果一个模型支持多个任务,您可以通过–task参数来设置任务。对于每个任务,我们列出了已在vLLM中实现的模型架构。每个架构旁边,我们列出了一些使用该架构的流行模型。

1260

【Unity 实用工具篇】 | Unity网格破碎插件 unity-fracture

前面写过一篇Unity中物体破碎效果的插件:【Unity 实用工具篇】 | Unity物体破碎效果 OpenFracture 本文介绍一个另外的工具unity-fracture,也可以实现网格破碎效果,且功能与OpenFracture略有差异。

努力前行,总会成为自己心中的那道光 1万+

Vue2 + JSX使用总结

Vue2 + JSX使用总结

baidu_33164415的博客 4039

PNETLab 镜像包官方下载太慢?不急,最新版本PNET_4.2.10分享!

你好,这里是网络技术联盟站,我是瑞哥。PNETLab是一个强大的网络仿真工具平台,全称Packet Network Emulator Tool Lab。它不仅允许用户进行深入的网络实验,还支持社区成员之间的实验室共享。PNETLab致力于为学习者、教师以及网络工程师提供一个全面的实验环境,以便于他们能够在实际部署前测试和验证网络配置和协议。和。这两个部分相辅相成,共同构成了一个全面且灵活的网络仿真生态系统。

网络技术联盟站 4479

Vue中的JSX语法详解

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

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

科研生产力革命:手把手教你打造基于大模型的Research Agent(文献调研+论文写作+思路激发)

本文介绍了如何利用Research Agent(科研智能体)提升科研效率。Research Agent能自主完成文献检索、信息整合和报告生成全流程,省去50%以上的基础工作时间。文章详细讲解了搭建运行环境的方法,包括工具准备和MetaGPT配置,并提供了两种实战方案:基础版Search-O1和专业版MetaGPT Research Agent。此外,还介绍了如何为垂直领域定制Agent,以及优化检索效果、改善报告逻辑等技巧。最后列举了学术研究、行业分析、内容创作和个人学习四大应用场景,帮助用户将AI从聊天工

LXY_LOVE36的博客 267

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

在Vue 中使用 JSX 语法

在Vue 中使用 JSX 语法

dreamingbaobei的博客 5493

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【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

VB摄像头监控

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

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

在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、付费专栏及课程。

余额充值