찾다
웹 프론트엔드View.jsvue3에서 JSX를 사용하는 방법을 자세히 설명하는 기사

vue에서 JSX를 어떻게 사용하나요? 다음 글에서는 vue3에서 JSX를 사용하는 방법을 소개하겠습니다. 도움이 되셨으면 좋겠습니다!

vue3에서 JSX를 사용하는 방법을 자세히 설명하는 기사

대부분의 경우 Vue는 템플릿 <template></template> 구문을 사용하여 애플리케이션을 만들 것을 권장합니다. <template></template>语法来创建应用。

在 Vue 3 的项目开发中,template 是 Vue 3 默认的写法。虽然 template 长得很像 HTML,但 Vue 其实会把 template 解析为 render 函数,之后,组件运行的时候通过 render 函数去返回虚拟 DOM。【学习视频分享:vue视频教程web前端视频

然而在某些使用场景下,我们真的需要用到 JavaScript 完全的编程能力。这时渲染函数就派上用场了。

h函数

Vue 提供了一个 h() 函数用于创建 vnodes虚拟dom。如下示例:

import { h } from &#39;vue&#39;

const vnode = h(
  &#39;div&#39;, // type
  { id: &#39;foo&#39;, class: &#39;bar&#39; }, // props
  [
    /* children */
  ]
)

在组件中如何使用呢?

之前当组合式 API 与模板一起使用时,setup() 钩子的返回值是用于暴露数据给模板。但是当使用h()的时候,setup() 钩子返回的是渲染函数

import { ref, h } from &#39;vue&#39;

export default {
  props: {
    /* ... */
  },
  setup(props) {
    const count = ref(1)

    // 返回渲染函数
    return () => h(&#39;div&#39;, props.msg + count.value)
  }
}

手写的 h 函数,可以处理动态性更高的场景。但是如果是复杂的场景,h 函数写起来就显得非常繁琐,需要自己把所有的属性都转变成对象。并且组件嵌套的时候,对象也会变得非常复杂。不过,因为 h 函数也是返回虚拟 DOM 的,所以有没有更方便的方式去写 h 函数呢?答案是肯定的,这个方式就是 JSX。

JSX

JSX 是 JavaScript 的一个类似 XML 的扩展,有了它,我们可以用简单方式来创建vnodes:

const vnode = <div id="app">hello</div>

这种在 JavaScript 里面写 HTML 的语法,就叫做 JSX,算是对 JavaScript 语法的一个扩展。上面的代码直接在 JavaScript 环境中运行时,会报错。JSX 的本质就是下面代码的语法糖。

const vnode = createVnode(&#39;div&#39;,{id:"app"}, &#39;hello&#39;)

其实h 函数内部也是调用 createVnode 来返回虚拟 DOM。

那么,如何在Vue项目中使用JSX呢?

默认的情况下,vue3+vite的项目不支持jsx,如果想支持jsx,需要安装插件@vitejs/plugin-vue-jsx

安装

npm i @vitejs/plugin-vue-jsx -D

在vite.config.js中进行配置:

import vueJsx from "@vitejs/plugin-vue-jsx"; // 配置vue使用jsx

export default defineConfig({
  plugins: [
    vue(), 
    vueJsx()
  ],
});

然后就可以在Vue组件中使用了:

// render.vue
<script>
import { ref } from "vue";
export default {
  setup() {
    const count = ref(100);
    return () => <div>count is: {count.value}</div>;
  },
};
</script>

注意:script中lang要改成jsx。

或者是一个jsx文件:

// render.jsx
import { defineComponent } from &#39;vue&#39;

export default defineComponent({
  setup() {
    return () => <div>jsx文件</div>
  }
})

Template vs JSX

我们该怎么选择 JSX 和 template 呢?

template优势:template 的语法是固定的,只有 v-if、v-for 等等语法。我们按照这种固定格式的语法书写,这样 Vue3 在编译层面就可以很方便地去做静态标记的优化,减少Diff过程。比如静态提升,类型标记,树结构打平等来提高虚拟 DOM 运行时性能。这也是 Vue 3 的虚拟 DOM 能够比 Vue 2 快的一个重要原因。

参考:Vue渲染机制

JSX优势:template 则因为语法限制原因,不能够像 JSX 那样可以支持更动态的需求。这也是 JSX 相比于 template 的一个优势。

JSX 相比于 template 还有一个优势,是可以在一个文件内返回多个组件。

那如何选择呢?

在实现业务需求的时候,优先使用 template,尽可能地利用 Vue 本身的性能优化。而对于动态性要求较高的组件可以使用 JSX 来实现。(比如后面,我会用JSX来实现动态表单生成器)

总结

首先,我们在项目中通常使用template模板来创建应用,template模板会在构建阶段被编译成render渲染函数。渲染函数就是用来返回虚拟DOM的函数。

那么我们其实可以跳过这个步骤,直接使用h函数来生成虚拟DOM。

h函数的内部执行的其实是createVNode函数来生成虚拟DOM的,但是由于h函数比较难写,所以我们使用JSX来更加方便快捷的书写。JSX的内部其实也是使用的createVNode函数。

JSX在JavaScript中是不能直接执行的,在vite项目中,我们需要安装插件@vitejs/plugin-vue-jsx

Vue 3 프로젝트 개발에서는 템플릿이 Vue 3의 기본 작성 방법입니다. 템플릿이 HTML과 매우 비슷해 보이지만 Vue는 실제로 템플릿을 렌더링 함수로 구문 분석한 다음 구성 요소가 실행될 때 렌더링 함수가 가상 DOM을 반환합니다. [학습 동영상 공유: vue 동영상 튜토리얼

, 웹 프론트엔드 비디오

]🎜🎜그러나 일부 사용 시나리오에서는 우리는 실제로 JavaScript에 대한 완전한 프로그래밍 기술이 필요합니다. 여기서 렌더링 기능이 유용하게 사용됩니다. 🎜

h 함수

🎜Vue는 vnode 가상 DOM을 생성하기 위한 h() 함수를 제공합니다. 다음 예: 구성 요소에서 🎜rrreee🎜를 사용하는 방법은 무엇입니까? 🎜🎜이전에는 구성 API를 템플릿과 함께 사용할 때 setup() 후크의 반환 값을 사용하여 템플릿에 데이터를 노출했습니다. 그러나 h()를 사용할 때 setup() 후크는 렌더링 함수를 반환합니다. 🎜rrreee🎜Handwriting h 함수는 처리할 수 있습니다. 역동적인 장면. 하지만 복잡한 장면이라면 h 함수를 작성하기가 매우 번거롭고, 모든 속성을 직접 객체로 변환해야 합니다. 구성 요소가 중첩되면 개체가 매우 복잡해집니다. 하지만 h 함수도 가상 DOM을 반환하므로 h 함수를 작성하는 더 편리한 방법이 있을까요? 대답은 '예'입니다. 방법은 JSX입니다. 🎜

JSX

🎜JSX는 XML과 유사한 JavaScript 확장으로 이를 사용하여 간단한 방법으로 vnode를 만들 수 있습니다. 🎜 rrreee 🎜JavaScript에서 HTML을 작성하는 이 구문을 JSX라고 하며 이는 JavaScript 구문의 확장입니다. 위 코드를 JavaScript 환경에서 직접 실행하면 오류가 보고됩니다. JSX의 핵심은 다음 코드의 구문 설탕입니다. 🎜rrreee🎜사실 createVnode는 가상 DOM을 반환하기 위해 h 함수 내에서도 호출됩니다. 🎜🎜그렇다면 Vue 프로젝트에서 JSX를 어떻게 사용하나요? 🎜🎜기본적으로 vue3+vite 프로젝트는 jsx를 지원하지 않습니다. jsx를 지원하려면 플러그인 @vitejs/plugin-vue-jsx🎜🎜설치 🎜rrreee🎜를 설치해야 합니다. vite.config에서 구성: 🎜rrreee🎜 그런 다음 Vue 구성 요소에서 사용할 수 있습니다: 🎜rrreee
🎜참고: 스크립트의 lang을 jsx로 변경해야 합니다. 🎜
🎜또는 jsx 파일: 🎜rrreee

템플릿과 JSX

🎜JSX와 템플릿을 어떻게 선택해야 할까요? 🎜🎜템플릿의 장점: 템플릿의 구문은 고정되어 있으며 v-if, v-for 등의 구문만 사용됩니다. 우리는 Vue3가 컴파일 수준에서 정적 태그를 쉽게 최적화하고 Diff 프로세스를 줄일 수 있도록 이 고정 형식 구문에 따라 작성합니다. 예를 들어 정적 승격, 유형 태그, 트리 구조 균형 조정 등은 가상 DOM 런타임 성능을 향상시킬 수 있습니다. 이는 Vue 3의 가상 DOM이 Vue 2보다 빠른 중요한 이유이기도 합니다. 🎜
🎜참조: Vue 렌더링 메커니즘🎜🎜
🎜JSX 장점: 템플릿은 구문 제한으로 인해 JSX와 같은 보다 동적인 요구 사항을 지원할 수 없습니다. 이는 템플릿에 비해 JSX의 장점이기도 합니다. 🎜🎜JSX는 하나의 파일에 여러 구성 요소를 반환할 수 있다는 점에서 템플릿에 비해 또 다른 장점이 있습니다. 🎜🎜그럼 어떻게 선택하나요? 🎜🎜비즈니스 요구사항을 실현할 때 템플릿 사용을 우선시하고 Vue 자체 성능 최적화를 최대한 활용하세요. 더 높은 동적 요구 사항을 가진 구성 요소는 JSX를 사용하여 구현할 수 있습니다. (예를 들어 나중에 JSX를 사용하여 동적 양식 생성기를 구현하겠습니다.) 🎜

요약

🎜우선 우리가 일반적으로 사용하는 프로젝트의 템플릿 애플리케이션을 생성하기 위해 템플릿 템플릿은 빌드 단계에서 렌더링 렌더링 기능으로 컴파일됩니다. 렌더링 함수는 가상 DOM을 반환하는 데 사용되는 함수입니다. 🎜🎜그런 다음 실제로 이 단계를 건너뛰고 h 함수를 직접 사용하여 가상 DOM을 생성할 수 있습니다. 🎜🎜h 함수의 내부 실행은 실제로 가상 DOM을 생성하는 createVNode 함수입니다. 하지만 h 함수는 작성하기 어렵기 때문에 JSX를 사용하여 보다 편리하고 빠르게 작성합니다. createVNode 함수는 실제로 JSX에서 내부적으로 사용됩니다. 🎜🎜JSX는 JavaScript에서 직접 실행할 수 없습니다. vite 프로젝트에서는 @vitejs/plugin-vue-jsx🎜🎜 플러그인을 설치하고 이에 맞게 구성해야 합니다. 🎜

마지막으로 템플릿과 JSX의 장단점을 비교해보았습니다. 템플릿의 장점은 구문이 고정되어 있고 작성하기 쉽다는 것입니다. Vue3은 컴파일 수준에서 템플릿 컴파일을 위해 많은 최적화를 수행했습니다. JSX의 장점은 유연성입니다. 동적 요구 사항이 높은 경우에는 JSX가 표준 구성이 되었습니다.

예술 산업에는 전문 분야가 있습니다. 템플릿과 JSX는 서로 다른 시나리오에서 각각 장점과 단점이 있습니다. 둘 다 적절하게 사용하면 강력한 프로그래밍 도구입니다.

(종료)

(학습 영상 공유: 웹 프론트엔드 개발, 기본 프로그래밍 영상)

위 내용은 vue3에서 JSX를 사용하는 방법을 자세히 설명하는 기사의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
이 기사는 掘金社区에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제
프레임 워크의 선택 : Netflix의 결정을 이끌어내는 것은 무엇입니까?프레임 워크의 선택 : Netflix의 결정을 이끌어내는 것은 무엇입니까?Apr 13, 2025 am 12:05 AM

Netflix는 주로 프레임 워크 선택의 성능, 확장 성, 개발 효율성, 생태계, 기술 부채 및 유지 보수 비용을 고려합니다. 1. 성능 및 확장 성 : Java 및 SpringBoot는 대규모 데이터 및 높은 동시 요청을 효율적으로 처리하기 위해 선택됩니다. 2. 개발 효율성 및 생태계 : React를 사용하여 프론트 엔드 개발 효율성을 향상시키고 풍부한 생태계를 활용하십시오. 3. 기술 부채 및 유지 보수 비용 : Node.js를 선택하여 유지 보수 비용과 기술 부채를 줄이기 위해 마이크로 서비스를 구축하십시오.

Netflix의 프론트 엔드의 반응, vue 및 미래Netflix의 프론트 엔드의 반응, vue 및 미래Apr 12, 2025 am 12:12 AM

Netflix는 주로 VUE가 특정 기능을 위해 보충하는 프론트 엔드 프레임 워크로 React를 사용합니다. 1) React의 구성 요소화 및 가상 DOM은 Netflix 애플리케이션의 성능 및 개발 효율을 향상시킵니다. 2) VUE는 Netflix의 내부 도구 및 소규모 프로젝트에 사용되며 유연성과 사용 편의성이 핵심입니다.

프론트 엔드의 vue.js : 실제 응용 프로그램 및 예제프론트 엔드의 vue.js : 실제 응용 프로그램 및 예제Apr 11, 2025 am 12:12 AM

vue.js는 복잡한 사용자 인터페이스를 구축하는 데 적합한 점진적인 JavaScript 프레임 워크입니다. 1) 핵심 개념에는 반응 형 데이터, 구성 요소화 및 가상 DOM이 포함됩니다. 2) 실제 응용 분야에서는 TODO 응용 프로그램을 구축하고 Vuerouter를 통합하여 시연 할 수 있습니다. 3) 디버깅 할 때 VuedeVtools 및 Console.log를 사용하는 것이 좋습니다. 4) 성능 최적화는 V-IF/V- 쇼, 목록 렌더링 최적화, 구성 요소의 비동기로드 등을 통해 달성 할 수 있습니다.

vue.js and React : 주요 차이점 이해vue.js and React : 주요 차이점 이해Apr 10, 2025 am 09:26 AM

vue.js는 중소형 프로젝트에 적합하지만 REACT는 크고 복잡한 응용 프로그램에 더 적합합니다. 1. Vue.js의 응답 형 시스템은 종속성 추적을 통해 DOM을 자동으로 업데이트하여 데이터 변경을 쉽게 관리 할 수 ​​있습니다. 2. 반응은 단방향 데이터 흐름을 채택하고 데이터 흐름에서 하위 구성 요소로 데이터가 흐르고 명확한 데이터 흐름과 곤란하기 쉬운 구조를 제공합니다.

vue.js vs. React : 프로젝트 별 고려 사항vue.js vs. React : 프로젝트 별 고려 사항Apr 09, 2025 am 12:01 AM

vue.js는 중소형 프로젝트 및 빠른 반복에 적합한 반면 React는 크고 복잡한 응용 프로그램에 적합합니다. 1) vue.js는 사용하기 쉽고 팀이 불충분하거나 프로젝트 규모가 작는 상황에 적합합니다. 2) React는 더 풍부한 생태계를 가지고 있으며 고성능 및 복잡한 기능적 요구가있는 프로젝트에 적합합니다.

태그를 vue로 점프하는 방법태그를 vue로 점프하는 방법Apr 08, 2025 am 09:24 AM

VUE에서 태그의 점프를 구현하는 방법에는 다음이 포함됩니다. HTML 템플릿의 A 태그를 사용하여 HREF 속성을 지정합니다. VUE 라우팅의 라우터 링크 구성 요소를 사용하십시오. javaScript 에서이. $ router.push () 메소드를 사용하십시오. 매개 변수는 쿼리 매개 변수를 통해 전달 될 수 있으며 동적 점프를 위해 라우터 옵션에서 경로가 구성됩니다.

VUE의 구성 요소 점프를 구현하는 방법VUE의 구성 요소 점프를 구현하는 방법Apr 08, 2025 am 09:21 AM

VUE에서 구성 요소 점프를 구현하는 방법은 다음과 같습니다. 라우터 링크 및 & lt; router-view & gt; 하이퍼 링크 점프를 수행하고 대상 경로로 속성을 지정합니다. & lt; router-view & gt; 현재 라우팅 된 렌더링 된 구성 요소를 표시하는 구성 요소. 프로그래밍 방식 탐색을 위해 router.push () 및 router.replace () 메소드를 사용하십시오. 전자는 역사를 구하고 후자는 기록을 떠나지 않고 현재 경로를 대체합니다.

Vue의 div로 점프하는 방법Vue의 div로 점프하는 방법Apr 08, 2025 am 09:18 AM

VUE에서 DIV 요소를 점프하는 두 가지 방법이 있습니다. VUE 라우터를 사용하고 라우터 링크 구성 요소를 추가하십시오. @Click 이벤트 리스너를 추가하고 이것을 호출하십시오. $ router.push () 메소드를 점프하십시오.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

MinGW - Windows용 미니멀리스트 GNU

MinGW - Windows용 미니멀리스트 GNU

이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

맨티스BT

맨티스BT

Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.