您当前的位置:首页 > 电脑百科 > 程序开发 > 前端

JSX是Vue前端开发的未来吗?

时间:2023-08-16 14:22:27  来源:今日头条  作者:前端小学生

在前端开发中,Vue 一直以其简单、高效的框架而备受开发者青睐。然而,随着 React 在市场上的流行,许多开发者开始对 JSX(JAVAScript XML)这种声明式编程风格产生兴趣。本文将探讨 JSX 在 Vue3 中的应用,并对其是否成为 Vue3 前端开发的未来进行论证。

Vue3与JSX的爱恨情仇

在开始之前,我们先来了解一下 Vue 本身的模版语法和 JSX 分别是什么。

Vue3模版语法

Vue3 模版语法是 Vue.js 中常用的一种声明式模板语法,使用 html 语法来描述视图。在模板语法中,可以通过插值、指令和事件绑定等方式来将数据与视图关联起来。这是其简单易用和上手快的主要原因之一。

<template>
  <div>
    <h1>{{ title }}</h1>
    <p v-if="showText">{{ text }}</p>
    <ul>
      <li v-for="item in list" :key="item.id">{{ item.name }}</li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {
      title: 'Vue3 Template Syntax',
      text: 'This is a demo text.',
      showText: true,
      list: [
        { id: 1, name: 'Item 1' },
        { id: 2, name: 'Item 2' },
        { id: 3, name: 'Item 3' },
      ],
    };
  },
};
</script>

Vue3 的模板语法使用双花括号({{ }})进行数据插值,使用v-if和v-for等指令处理条件和循环逻辑。

什么是JSX?

JSX 是一种 JavaScript 的语法扩展,它允许在 JavaScript 代码中编写类似于 XML 的结构。React 是第一个广泛使用 JSX 的框架,它将组件的结构和逻辑封装在 JSX 中,用于描述 UI 组件的层次结构。随着 React 的成功,也随着时间的推移,JSX 逐渐成为了一种通用的模式,被许多其他框架和库所采用支持。

React示例:

import React, { useState } from 'react';

function JSXComponent() {
  const [title, setTitle] = useState('JSX in React');
  const [showText, setShowText] = useState(true);
  const list = [
    { id: 1, name: 'Item 1' },
    { id: 2, name: 'Item 2' },
    { id: 3, name: 'Item 3' },
  ];

  return (
    <div>
      <h1>{title}</h1>
      {showText && <p>This is a demo text.</p>}
      <ul>
        {list.map((item) => (
          <li key={item.id}>{item.name}</li>
        ))}
      </ul>
    </div>
  );
}

export default JSXComponent;

Vue3示例:

import { defineComponent, ref } from 'vue';

const JSXComponent = defineComponent({
  setup() {
    const title = ref('JSX in Vue3');
    const showText = ref(true);
    const list = [
      { id: 1, name: 'Item 1' },
      { id: 2, name: 'Item 2' },
      { id: 3, name: 'Item 3' },
    ];

    return {
      title,
      showText,
      list,
    };
  },
  render() {
    return (
      <div>
        <h1>{this.title}</h1>
        {this.showText && <p>This is a demo text.</p>}
        <ul>
          {this.list.map((item) => (
            <li key={item.id}>{item.name}</li>
          ))}
        </ul>
      </div>
    );
  },
});

export default JSXComponent;

从上面不难看出,在 JSX 中,我们可以直接使用 JavaScript 表达式(如{title}),也可以使用条件语句(如{showText && <p>This is a demo text.</p>})和数组的map方法来处理循环逻辑。

这些只是举例,有很多的 JavaScript 语法和方法等,都可以在这里使用。总之,使用 JSX 开发,可以很大程度上利用好 JavaScript,开发更加方便。

如何配置JSX?

在 Vue3 中,我们可以通过 Vue 官方提供的项目脚手架工具 create-vue 来新建一个支持JSX的项目。首先,确保你安装了最新版本的 Node.js(我用的是 16+ 版本),然后执行以下命令:

npm init vue@latest

这个命令将会安装并执行 create-vue 工具。在执行过程中,你会看到一些可选的功能配置提示,其中会有如下内容:

Vue.js - The Progressive JavaScript Framework

✔ Project name: … vue-project
✔ Add TypeScript? … No / Yes
✔ Add JSX Support? … No / Yes
✔ Add Vue Router for Single Page Application development? … No / Yes
✔ Add Pinia for state management? … No / Yes
✔ Add Vitest for Unit Testing? … No / Yes
✔ Add an End-to-End Testing Solution? › No
✔ Add ESLint for code quality? … No / Yes
✔ Add Prettier for code formatting? … No / Yes

Scaffolding project in ...

执行到✔ Add JSX Support?时选择Yes,这样 JSX 就会自动安装。如果不确定是否要开启某个功能,你可以直接按下回车键选择 No。

当然,你也可以在已有的Vue项目中配置JSX。

在已有项目中配置JSX,首先需要安装相关依赖:

npm install --save-dev @vue/babel-plugin-jsx

然后,在项目的vite.config.ts文件中进行配置。具体的配置内容如下图所示:

 

image.png

配置完成后,现在我们就可以在项目中使用 JSX 语法来开发了。这样,我们可以根据具体的场景选择使用 Vue 模板或 JSX 语法。

总的来说,配置 JSX 是非常简单的,通过上述步骤,我们可以轻松地在 Vue 项目中使用 JSX,发挥其简洁、易读的优势,让我们的代码更加优雅和高效。

模板语法 vs JSX

现在,我们来对比一些具体的代码示例,看看 Vue3 模板语法和 JSX 之间的差异。

 

1000.webp

1.数据插值

Vue3 模板语法使用双花括号{{}}进行数据插值,而 JSX 使用花括号{}。

模板示例:

<template>
  <p>{{ message }}</p>
</template>

<script>
import { ref } from 'vue';

export default {
  setup() {
    const message = ref('Hello, JSX!');
    return { message };
  },
};
</script>

JSX示例:

import { defineComponent } from 'vue'; 

const DynamicData = defineComponent({
  setup() {
    const message = ref('Hello, JSX!');
    return { message };
  },
  render() {
    return <p>{this.message}</p>;
  },
});

2.条件渲染

在 Vue3 中,我们可以使用v-if指令进行条件渲染,而在 JSX 中,我们使用 JavaScript 的条件表达式。

模板示例:

<template>
  <div>
    <p v-if="showContent">Content is visible.</p>
    <p v-else>Content is hidden.</p>
    <button @click="toggleContent">Toggle</button>
  </div>
</template>

<script>
import { ref } from 'vue';

export default {
  setup() {
    const showContent = ref(true);

    function toggleContent() {
      showContent.value = !showContent.value;
    }

    return { showContent, toggleContent };
  },
};
</script>

JSX示例:

import { defineComponent } from 'vue'; 

const ConditionalRender = defineComponent({
  setup() {
    const showContent = ref(true);
    return { showContent };
  },
  render() {
    return (
      <div>
        {this.showContent ? <p>Content is visible.</p> : <p>Content is hidden.</p>}
        <button onClick={() => this.showContent = !this.showContent}>Toggle</button>
      </div>
    );
  },
}};

3.列表渲染

在 Vue3 中,我们使用v-for指令来处理列表渲染,而在 JSX 中,我们使用 JavaScript 的map方法。

模板示例:

<template>
  <ul>
    <li v-for="item in items" :key="item">{{ item }}</li>
  </ul>
</template>

<script>
import { ref } from 'vue';

export default {
  setup() {
    const items = ref(['Apple', 'Banana', 'Orange']);
    return { items };
  },
};
</script>

JSX示例:

import { defineComponent } from 'vue'; 

const ListRendering = defineComponent({
  setup() {
    const items = ref(['Apple', 'Banana', 'Orange']);
    return { items };
  },
  render() {
    return (
      <ul>
        {this.items.map(item => (
          <li key={item}>{item}</li>
        ))}
      </ul>
    );
  },
});

模板语法和JSX的优劣势

接下来,我们将对 Vue 模板和 JSX 进行对比,从多个方面分析它们的优势与劣势。

a. 语法简洁性

Vue 模板使用 HTML 语法,更加接近常规 HTML 结构,因此对于前端开发者来说比较容易上手。然而,「随着项目的复杂性增加,模板中可能会包含大量的指令和插值,导致代码变得冗长。」 例如,条件渲染、循环遍历等情况都需要使用 Vue 特定的指令。「相比之下,JSX 在 JavaScript 语法的基础上,使用类似 XML 的结构,使得代码更加紧凑和直观。」

模板示例:

<template>
  <div>
    <h1 v-if="showTitle">{{ title }}</h1>
    <ul>
      <li v-for="item in items" :key="item.id">{{ item.name }}</li>
    </ul>
  </div>
</template>

JSX示例:

const MyComponent = () => {
  return (
    <div>
      {showTitle && <h1>{title}</h1>}
      <ul>
        {items.map(item => (
          <li key={item.id}>{item.name}</li>
        ))}
      </ul>
    </div>
  );
};

从上面的对比可以看出,JSX语法更加简洁,尤其在条件渲染和循环遍历方面更加灵活。

b. 组件化开发

Vue.js 本身就支持组件化开发,但是在 Vue 模板中,组件的定义与使用是通过特定的 HTML 标签和 Vue 指令实现的。这种方式虽然简单易懂,但是在代码重用和维护方面可能会有一些限制。相比之下,JSX 在 React 中的组件化开发非常强大,组件可以直接在 JavaScript 中定义,并且支持更加灵活的组合方式。

模板示例:

<template>
  <div>
    <my-component :prop1="value1" :prop2="value2" />
  </div>
</template>

JSX示例:

const MyComponentWrapper = () => {
  return (
    <div>
      <MyComponent prop1={value1} prop2={value2} />
    </div>
  );
};

从上面的对比可以看出,JSX 允许在JavaScript中直接定义组件,并且组件的传参更加直观。

c. 类型检查与IDE支持

由于 Vue 模板使用了特定的指令和 HTML 语法,IDE 对于代码的支持可能相对有限。而 JSX 是 JavaScript 的扩展语法,因此可以与类型检查工具(如TypeScript)完美结合,同时得到更好的 IDE 支持,例如自动补全、代码跳转等。

d. 可扩展性

Vue 模板的语法是固定的,不能随意扩展。而 JSX 作为 JavaScript 的一部分,不需要额外的指令或语法,可以通过编写函数和组件来扩展其语法,也使得处理逻辑、计算和条件渲染变得更加灵活和方便。

e.生态系统的互通性

JSX 作为 React 的核心特性,拥有庞大的社区和丰富的生态系统,为开发者提供了海量的工具和库。

同时 JSX 在多个框架中得到了广泛支持,开发者们可以更轻松地在不同的项目和技术栈之间切换,而无需学习不同的模板语法。如文章上面“如何配置JSX?”中对已有项目的配置,将 JSX 作为插件写到 Vue Plugin 即可配置完成。

模板语法和JSX的适用场景

Vue3 的模板语法和 JSX 各有优劣,因此它们在不同的场景下有不同的适用性。

模板语法的适用场景

  • 快速原型开发:对于快速构建原型或小型项目,Vue3 的模板语法非常适合,可以快速上手和开发。
  • HTML/css开发者:对于更擅长 HTML/CSS 的开发者,Vue3 的模板语法更加亲切。

JSX的适用场景

  • 复杂交互:对于具有复杂交互逻辑的项目,使用 JSX 可以更灵活地处理各种条件和事件。
  • React生态系统:如果项目需要使用丰富的 React 生态系统,或者团队已经熟悉了 React 和 JSX,那么继续使用 JSX 是合理的选择。

总结

无论是从开发体验、技术生态还是未来趋势来看,JSX它使得组件的模板结构更加清晰、声明性,提供了更强大的 JavaScript 表达能力,同时也增强了与其他技术栈的互通性。虽然传统的 Vue2 模板语法在一定程度上仍然适用,但通过引入 JSX,Vue3 在前端开发领域拥有更广阔的发展前景。开发者们可以更加便利地构建复杂的交互界面,同时又能享受到 Vue3 带来的性能优势。



Tags:JSX   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
你了解 JSX,那你了解 StyleX 么?
大家好,我卡颂。近日,Meta开源了一款「CSS-in-JS库」 &mdash;&mdash; StyleX。看命名方式,Style - X是不是有点像JS - X,他们有关系么?当然有。JSX是一种「用JS描述HTML」的语法...【详细内容】
2023-12-08  Search: JSX  点击:(158)  评论:(0)  加入收藏
JSX是Vue前端开发的未来吗?
在前端开发中,Vue 一直以其简单、高效的框架而备受开发者青睐。然而,随着 React 在市场上的流行,许多开发者开始对 JSX(JavaScript XML)这种声明式编程风格产生兴趣。本文将探讨...【详细内容】
2023-08-16  Search: JSX  点击:(256)  评论:(0)  加入收藏
实现JSX的转换
当我们在项目中使用 React 构建界面时,主要使用的就是 React 包。它提供了开发者需要的所有API。如React.Component、React.createElement、React.useState等等,所以它也是大...【详细内容】
2023-03-20  Search: JSX  点击:(127)  评论:(0)  加入收藏
简单理解JavaScript,TypeScript和JSX
JavaScript:基本概念:JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于浏览...【详细内容】
2019-06-18  Search: JSX  点击:(1197)  评论:(0)  加入收藏
▌简易百科推荐
20k级别前端是怎么使用LocalStorage的,想知道吗?
当咱们把咱们想缓存的东西,存在localStorage、sessionStorage中,在开发过程中,确实有利于咱们的开发,咱们想看的时候也是一目了然,点击Application就可以看到。前言大家好,我是林...【详细内容】
2024-03-26  前端之神  微信公众号  Tags:前端   点击:(11)  评论:(0)  加入收藏
前端不存在了?盲测64%的人更喜欢GPT-4V的设计,杨笛一等团队新作
3 月 9 日央视的一档节目上,百度创始人、董事长兼 CEO 李彦宏指出,以后不会存在「程序员」这种职业了,因为只要会说话,人人都会具备程序员的能力。「未来的编程语言只会剩下两种...【详细内容】
2024-03-11  机器之心Pro    Tags:前端   点击:(9)  评论:(0)  加入收藏
前端开始“锈化”?Vue团队开源JS打包工具:基于Rust、速度极快、尤雨溪主导
Vue 团队已正式开源Rolldown &mdash;&mdash; 基于 Rust 的 JavaScrip 打包工具。Rolldown 是使用 Rust 开发的 Rollup 替代品,它提供与 Rollup 兼容的应用程序接口和插件接口...【详细内容】
2024-03-09  OSC开源社区    Tags:Vue   点击:(11)  评论:(0)  加入收藏
两年前端经验还不会手写Promise?
什么是promise?当我们处理异步操作时,我们经常需要进行一系列的操作,如请求数据、处理数据、渲染UI等。在过去,这些操作通常通过回调函数来处理,但是回调函数嵌套过多会导致代码...【详细内容】
2024-03-07  海燕技术栈  微信公众号  Tags:Promise   点击:(23)  评论:(0)  加入收藏
网站开发中的前端和后端开发有什么区别
前端开发和后端开发都是干什么的?有哪些区别?通俗地讲,前端干的工作是用户可以直接看得见的,而后端开发的工作主要在服务端,用户不太能直接看到。虽然前端开发和后端开发的工作有...【详细内容】
2024-02-21  CarryData    Tags:前端   点击:(31)  评论:(0)  加入收藏
网站程序开发中的前后端分离技术
随着互联网的快速发展和技术的不断创新,传统的网站开发模式已经难以满足日益增长的业务需求。为了提高开发效率、增强系统的可维护性和可扩展性,前后端分离技术逐渐成为了网站...【详细内容】
2024-01-31  网站建设派迪星航    Tags:前后端分离   点击:(23)  评论:(0)  加入收藏
如何优雅的实现前端国际化?
JavaScript 中每个常见问题都有许多成熟的解决方案。当然,国际化 (i18n) 也不例外,有很多成熟的 JavaScript i18n 库可供选择,下面就来分享一些热门的前端国际化库!i18nexti18ne...【详细内容】
2024-01-17  前端充电宝  微信公众号  Tags:前端   点击:(68)  评论:(0)  加入收藏
Vue中Scope是怎么做样式隔离的?
scope样式隔离在 Vue 中,样式隔离是通过 scoped 特性实现的。当在一个组件的 <style> 标签上添加 scoped 特性时,Vue 会自动为这个样式块中的所有选择器添加一个唯一的属性,以...【详细内容】
2024-01-04  海燕技术栈  微信公众号  Tags:Vue   点击:(80)  评论:(0)  加入收藏
vue3中 ref和 reactive的区别 ?
最近有朋友在面试过程中经常被问到这么一个问题,vue3 中的ref 和 reactive的区别在哪里,为什么 要定义两个API 一个 api不能实现 响应式更新吗??带着这个疑问 ,我们 接下来进行逐...【详细内容】
2024-01-03  互联网高级架构师  今日头条  Tags:vue3   点击:(38)  评论:(0)  加入收藏
React18 与 Vue3 全方面对比
1. 编程风格 & 视图风格1.1 编程风格 React 语法少、难度大;Vue 语法多,难度小例如指令:Vue<input v-model="username"/><ul> <li v-for="(item,index) in list" :key="inde...【详细内容】
2024-01-03  爱做梦的程序员  今日头条  Tags:Vue3   点击:(72)  评论:(0)  加入收藏
站内最新
站内热门
站内头条