广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >Vue中如何使用JSX
  • 818
分享到

Vue中如何使用JSX

2024-04-02 19:04:59 818人浏览 安东尼
摘要

小编给大家分享一下 Vue中如何使用jsX,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!vue.js 具有简单的 api 和几个

小编给大家分享一下 Vue中如何使用jsX,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

vue.js 具有简单的 api 和几个选项,可用于在我们的组件中定义html模板。

我们可以使用 <template> 标签选项,在根组件实例上定义 template 属性,或者使用单文件组件。

上面的选项很棒并且可以完美地工作,但是,在您的应用程序的生命周期中,有时会感到笨拙,设计过度或非常不灵活。

那么,我们为什么要使用 JSX 而不是其他模板定义呢?

  • JSX 更易读, <div></div> 的写法一看就是比 this.$createElement('div', {}, [...]) 简洁很多。

  • JSX 也是 javascript

  • Vue支持JSX。

  • JSX 使自定义 Vue 组件更容易导入和管理。

简介

先举一个例子来说明为什么 JSX 是好的。

我们要构建一个 <TextField/> 组件,该组件可以是普通的单行文本输入或多行输入(文本区域)。 我们的模板声明可能看起来像这样。

<div>
 <textarea v-if="multiline" v-model="content" :name="name" :placeholder="placeholder" :aria-invalid="false">
 <input v-else v-model="content" :name="name" :placeholder="placeholder" :aria-invalid="false">
 </div>

从上面的代码片段中可以看到,我们很快就会遇到一些问题,比如重复代码等等。想象一下,必须支持 input 上面所列的各种属性。上面的这个小片段将会增长并成为一个难以维护的噩梦。

要解决这个问题,我们需要使用Vue进行降级处理,因此需要使用理接近Vue的内部API来解决这个问题。

render() 方法

注意:这里并不是说没有JSX就没有一种简单的方法来处理上面的问题,只是说将这个逻辑移动到带有JSX的 render() 方法可以使组件更直观。

我们在 Vue 中创建的每个组件都有一个 render 方法。这个就是 Vue 选择渲染组件的地方。即使我们不定义这个方法,Vue 也会为我们做这件事。

这意味着当我们在 Vue 中定义 HTML 模板时,Vue 的模板编译器将其编译为一个 createElement 函数,该函数带有几个参数并从 render 函数返回结果。

为了修复上一节中的代码,我们删除了 template 属性或 template 标签,并在组件上定义了 render() 方法。 如果在组件上定义了 render 方法,则 Vue 将忽略 template 定义。

...
 export default {
  name: 'TextField',
  render (createElement) {
   const tag = this.multiline ? 'textarea' : 'input'

  return createElement(tag, {
    class: {
     'text-input': true,
     'is-disabled': false
    },
    attrs: {
     name: this.name,
     placeholder: this.placeholder,
     'aria-invalid': false
    }
   })
  } 
 }
...

上面的代码做了几件事:

  1. render 方法从Vue获取一个 createElement 助手。

  2. 我们以编程方式定义我们的标签。

  3. 然后,我们创建标签并将其属性,类等作为对象传递。 我们可以传递给 createElement 的 选项 很多。

  4. 我们返回新创建的元素进行渲染。

我们为 Vue 组件定义的每个模板都将转换为可返回 createElement 函数的 render 方法。 因为这个原因, render 方法将优先于模板定义。

举个例子:

// HTML
<div>
 <p>Only you can stop forest fires</p>
</div>

模板编译器将把上面的 HTML 转换成:

...
render (createElement) {
 return createElement(
 'div',
 {},
 createElement(
  'p',
  {},
  'Only you can stop forest fires'
 )
 )
}
...

现在你可能会问这个问题:“对可读性来说这不好吗?” 答案是肯定的。 一旦定义了具有许多元素嵌套级别或具有多个同级元素的组件,我们就会遇到这个新问题。

这就是 JSX 出现的原因,它可以很好的解决此类问题。

JSX 是什么

JSX 是 Facebook 工程团队创造的一个术语。

JSX 是 JavaScript 的类似XML的语法扩展,没有任何定义的语义。

JSX 不打算由引擎或浏览器实现。相反,我们将使用 Babel 之类的转置器将JSX转换成常规的 JS 。

// 此行是JSX的示例
const heading = <h2>Welcome to Scotch</h2>;

基本上,JSX 允许我们在 JS 中使用类似 Html 的语法。

配置 Vue 以使用 JSX

如果使用的 Vue-cli 大于或等于 3.0 版本,那么就直接可以使用JSX的语法了。

如果您使用的是不支持 JSX 的Vue-cli较旧版本,则可以通过安装 babel-preset-vue-app 来添加它,并将其添加到您的 .babelrc 文件中。

# Using npm
 npm install --save-dev babel-preset-vue-app
# Using yarn
 yarn add --dev babel-preset-vue-app

在 .babelrc 文件中,添加:

{
 "presets": ["vue-app"]
}

我们现在可以在组件的 render 函数中使用 JSX。

在 Vue 中使用 JSX 需要注意的地方
在 Vue 中使用JSX需要注意几点。

要监听 JSX 中的事件,我们需要 “on” 前缀。 例如,将 onClick 用于单击事件。

render (createElement) {
  return (
   <button onClick={this.handleClick}></button>
  )
 }

要修改事件,请使用

render (createElement) {
  return (
   <button onClick:prevent={this.handleClick}></button>
  )
 }

绑定变量,注意这里不是使用 :

render (createElement) {
  return (
   <button content={this.generatedText}></button>
  )
 }

将HTML字符串设置为元素的内容,使用 domPropsInnerHTML 而不是使用 v-html

render (createElement) {
  return (
   <button domPropsInnerHTML={htmlContent}></button>
  )
 }

我们也可以展开一个大对象:

render (createElement) {
  return (
   <button {...this.largeProps}></button>
  )
 }

在 render 中使用JSX

回到我们最初的 “TextField” 组件。现在我们已经在 Vue 应用程序中启用了 JSX,我们现在可以这样做了。

render (createElement) {
  const inputAttributes = {
   class: 'input-field has-outline', // class definition
   onClick: this.handleClick // event handler
   backdrop: false // custom prop
  }
  const inputMarkup = this.multiline
   ? <textarea {...inputAttributes}></textarea>
   : <input {...inputAttributes}/>
 return inputMarkup
 }

导入 Vue JS 组件

在 Vue 中使用JSX的另一个好处是,我们不再需要注册所需的每个组件。 我们只是导入和使用。

import {Button} from '../components'

export default {
  render (createElement) {
   return <Button primary={true}>Edit</Button>
  }
 }

如何使 JSX 与 TypeScript 一起使用

typescript 用作一种向 JavaScript添加类型检查的机制。要在 JSX 支持 TypeScript中,需要修改 tsconfig.JSON

要在 TypeScript 中启用 JSX,请先将该文件另存为 .tsx 文件,然后将 tsconfig.json 修改为包括:

{
 "compilerOptions": {
  ....
  "jsx": "preserve",
 }
 }

将 jsx 选项设置为 “preserve” 意味着 TypeScript 不应处理JSX。 这样做使 Babel 可以控制所有JSX 和 TypeScript 坚持使用类型,因为它尚不支持 Vue JSX。

然后在项目中创建一个 jsx.d.ts 文件,并为 Vue 添加 TypeScript JSX 声明。

import Vue, {Vnode} from 'vue'

declare global {
 namespace JSX {
  interface Element extends VNode {}
  interface ElementClass extends Vue {}
  interface ElementAttributesProperty {
  $props: {}
  }
  interface IntrinsicElements {
 [elemName: string]: any
  }
 }
 }

确保 TypeScript 可以加载声明文件。 或者,可以通过以下方式在 tsconfig.json 中为其添加自动加载功能:

{
 "compilerOptions": {
  ...
  "typesRoot": ["./node_modules/@types", "./types"]
 }
 }

代码部署后可能存在的BUG没法实时知道,事后为了解决这些BUG,花了大量的时间进行log 调试,这边顺便给大家推荐一个好用的BUG监控工具 Fundebug 。

以上是“ Vue中如何使用JSX”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网JavaScript频道!

--结束END--

本文标题: Vue中如何使用JSX

本文链接: https://www.lsjlt.com/news/69117.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Vue中如何使用JSX
    小编给大家分享一下 Vue中如何使用JSX,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Vue.js 具有简单的 API 和几个...
    99+
    2022-10-19
  • Vue中的JSX如何使用
    今天小编给大家分享一下Vue中的JSX如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。JSX简介JSX是一种Javas...
    99+
    2023-07-05
  • 如何在vue中使用jsx语法
    目录为什么需要在vue中使用jsx在vue中如何使用jsxtemplate转jsx的语法转换为什么需要在vue中使用jsx 几年前面试的时候,被问过这个问题,当时我一脸懵,这两个东西...
    99+
    2022-11-13
  • 怎么在Vue中使用JSX
    本篇内容主要讲解“怎么在Vue中使用JSX”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么在Vue中使用JSX”吧!简介先举一个例子来说明为什么 JSX 是好...
    99+
    2022-10-19
  • vue3中如何使用JSX
    这篇文章主要介绍了vue3中如何使用JSX的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vue3中如何使用JSX文章都会有所收获,下面我们一起来看看吧。在绝大多数情况下,Vue 推荐使用模板<templa...
    99+
    2023-07-04
  • Vue3+Vite中如何使用JSX
    这篇文章主要介绍“Vue3+Vite中如何使用JSX”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Vue3+Vite中如何使用JSX”文章能帮助大家解决问题。JSX介绍JSX(JavaScript ...
    99+
    2023-07-04
  • Vue3如何使用JSX
    这篇文章主要介绍“Vue3如何使用JSX”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Vue3如何使用JSX”文章能帮助大家解决问题。1. Vue3 中 JSX 的基本应用使用 .jsx 格式文件和...
    99+
    2023-07-05
  • 如何在vue3中使用jsx语法
    目录背景语法一丶 普通内容二丶 动态变量三丶 函数事件1.基本用法2.参数进阶四丶 ref绑定五丶 v-model语法六丶 v-slots语法七丶 v-for语法八丶 v-if语法九...
    99+
    2023-03-06
    vue3使用jsx语法 vue jsx语法
  • vue.js如何使用jsx语法
    这篇文章将为大家详细讲解有关vue.js如何使用jsx语法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。vue  jsx  语法与 react&nbs...
    99+
    2022-10-19
  • Vue下使用JSX的方法是什么
    这篇文章主要介绍了Vue下使用JSX的方法是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Vue下使用JSX的方法是什么文章都会有所收获,下面我们一起来看看吧。Vue.js 具有简单的 API 和几个选项,...
    99+
    2023-07-04
  • vue中正确使用jsx语法的姿势分享
    目录前言 虚拟DOM 什么是虚拟DOM 虚拟DOM的优点渲染函数是什么 jsx 在vue3中编写jsx的两种方式 用法最后 参考前言 又到了愉快的摸鱼时间,我觉得不能荒废,H5页面...
    99+
    2022-11-12
  • 一文详解如何在Vue3+Vite中使用JSX
    目录JSX介绍在 Vue3 中使用 JSX安装插件(@vitejs/plugin-vue-jsx)新建 jsx 文件语法补充知识:注意事项总结JSX介绍 JSX(JavaScript...
    99+
    2023-02-16
    vue3 vite使用jsx vue3+vite 前端 vite搭建vue3
  • 一文详解如何在Vue3中使用jsx/tsx
    目录JSX 如何用插值条件渲染(v-if)列表循环(v-for)事件绑定事件修饰符v-model插槽最后我们都知道,通常情况下我们使用 vue 大多都是用的 SFC(Signle F...
    99+
    2023-03-23
    Vue3使用jsx/tsx Vue3 jsx/tsx Vue jsx tsx
  • Vue如何通过JSX动态渲染组件
    这篇文章主要介绍“Vue如何通过JSX动态渲染组件”,在日常操作中,相信很多人在Vue如何通过JSX动态渲染组件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue如何通过JSX动态渲染组件”的疑惑有所帮助!...
    99+
    2023-07-04
  • Vue中jsx不完全应用的示例分析
    这篇文章主要介绍Vue中jsx不完全应用的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在使用Vue开发项目时绝大多数情况下都是使用模板来写HTML,但是有些时候页面复杂又存...
    99+
    2022-10-19
  • Vue中什么是JSX?什么时候用?怎么用?
    Vue中什么是JSX?下面本篇文章给大家了解一下Vue中的JSX,介绍一下什么时候使用JSX、在Vue2中的基本使用,希望对大家有所帮助!JSX简介JSX是一种Javascript的语法扩展,即具备了Javascript的全部功能,同时又兼...
    99+
    2023-05-14
    JSX 前端 Vue.js JavaScript
  • 怎么在Vue3中使用jsx/tsx
    今天小编给大家分享一下怎么在Vue3中使用jsx/tsx的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。JSX 如何用这里以v...
    99+
    2023-07-05
  • 如何在vue3中优雅的使用jsx/tsx详解
    目录前言安装插件(@vitejs/plugin-vue-jsx)1、插值2、class与style 绑定3、条件渲染4、列表渲染5、事件处理6、v-model7、slot插槽8、使用...
    99+
    2022-11-13
  • 详解Vue3+Vite中怎么使用JSX
    虽然 jsx 最早是由 React 引入,但实际上 JSX 语法并没有定义运行时语义,并且能被编译成各种不同的输出形式。如果你之前使用过 JSX 语法,那么请注意 Vue 的 JSX 编译方式与 React 中 JSX 的编译方式不同,因此...
    99+
    2023-05-14
    Vue vue3 vite JSX
  • 怎么在vue3中使用jsx语法
    今天小编给大家分享一下怎么在vue3中使用jsx语法的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。背景vue3项目中 推进使...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作