Vue3中使用jsx/tsx的教程詳解
首先,恭喜一下 React,再過 4 個月,就達(dá)成了兩年無更新記錄

反觀隔壁的 Vue,穩(wěn)定迭代更新

之前寫 React 的時候,最喜歡的是 JSX/TSX 語法,把 HTML 組件當(dāng)做 JavaScript/TypeScript 代碼片段處理
const App: React.FC<AppProps> = ({ title }) => {
const [count, setCount] = useState<number>(0);
// ??????
return (
<div>
<h1>{title}</h1>
<p>You clicked {count} times</p>
<button onClick={() => setCount(count + 1)}>
Click me
</button>
</div>
);
}
轉(zhuǎn)戰(zhàn) Vue 之后,最痛苦的是沒辦法利用 TSX 語法靈活創(chuàng)建組件。
最常見的例子是,當(dāng)我有一個數(shù)據(jù)表格,需要自定義字段的組件時,得用 h() 函數(shù)來創(chuàng)建:
<script lang="ts" setup>
//...
const createColumns = () => {
return [
{
title: 'Action',
key: 'actions',
render (row) {
/* ?????? */
return h(
NButton,
{
strong: true,
tertiary: true,
size: 'small',
onClick: () => play(row)
},
{ default: () => 'Play' }
)
}
}
]
}
//...
</script>
h() 麻煩,低頻使用情況下,每次都得查一遍文檔。
最近發(fā)現(xiàn) Vue3 原來是支持 JSX & TSX 的!
官方文檔: vuejs.org/guide/extras/render-function.html#jsx-tsx
在 Vue3 中集成 JSX & TSX 相對簡單,安裝插件:
npm install @vue/babel-plugin-jsx -D
將 babel 文件中配置:
{
"plugins": ["@vue/babel-plugin-jsx"]
}
如果項目用 TypeScript,則在 tsconfig.json 中配置:
{
"compilerOptions": {
"jsx": "preserve"
}
}
注意:這里以 babel 舉例,如果是其他工具鏈,比如 Vite、Nuxt 的話,請參考對應(yīng)文檔。
集成之后,上述的 h() 終于可以扔掉,換回熟悉的 JSX & TSX:
<script lang="ts" setup>
//...
const createColumns = () => {
return [
{
title: 'Action',
key: 'actions',
render (row) {
/* ?????? */
return (
<NButton
strong={true}
tertiary={true}
size="small"
onClick={() => play(row)}>
Play
</NButton>
)
}
}
]
}
//...
</script>
Vue3,你是懂框架的,妥妥的真香。
Vue 的誕生,已經(jīng)十個年頭,這么些年來,Vue 始終穩(wěn)步前進。
從降低開發(fā)成本和心智負(fù)擔(dān)方面來說,Vue 算得上優(yōu)秀。
先后推出的 Composition API、Setup、支持 TSX 語法等,真正的理解、賦能開發(fā)者。
值得一提的是,國內(nèi)的開發(fā)者確實偏愛 Vue,不論是 Star 人數(shù)、Issue 數(shù)量 和 Pull Request 數(shù)量,都是遙遙領(lǐng)先:

數(shù)據(jù)來源:ossinsight.io/analyze/vuejs/core#people
到此這篇關(guān)于Vue3中使用jsx/tsx的教程詳解的文章就介紹到這了,更多相關(guān)Vue3使用jsx/tsx內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue3+elementPlus中 樹形控件封裝的實現(xiàn)
本文主要介紹了Vue3+elementPlus中 樹形控件封裝的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-04-04
vue中radio根據(jù)動態(tài)值綁定checked無效的解決
這篇文章主要介紹了vue中radio根據(jù)動態(tài)值綁定checked無效的解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03
從入門到精通詳解Vue如何實現(xiàn)防止重復(fù)提交
作為經(jīng)歷過大型項目洗禮的前端工程師,小編深知重復(fù)提交問題絕非簡單的按鈕禁用就能解決,今天,就將帶大家構(gòu)建一套生產(chǎn)級的重復(fù)提交防御體系,涵蓋從基礎(chǔ)到架構(gòu)的全套方案2025-06-06
vue3中storeToRefs讓store中的結(jié)構(gòu)出來的數(shù)據(jù)也能變成響應(yīng)式(推薦)
這篇文章主要介紹了vue3中storeToRefs讓store中的結(jié)構(gòu)出來的數(shù)據(jù)也能變成響應(yīng)式,本文通過實例代碼給大家介紹的分需要的朋友可以參考下2024-09-09

