TSX常見(jiàn)簡(jiǎn)單入門(mén)用法之Vue3+Vite
1.安裝tsx
1.安裝tsx插件
npm install @vitejs/plugin-vue-jsx -D
2.vite.config.ts里的配置
import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' import vueJsx from '@vitejs/plugin-vue-jsx' // https://vitejs.dev/config/ export default defineConfig({ plugins: [vue(),vueJsx()], })
3.tsconfig.json里的配置
{ "compilerOptions": { "target": "esnext", "useDefineForClassFields": true, "module": "esnext", "moduleResolution": "node", "strict": true, "jsx": "preserve", "jsxFactory": "h", "jsxFragmentFactory": "Fragment", "sourceMap": true, "resolveJsonModule": true, "isolatedModules": true, "esModuleInterop": true, "lib": ["esnext", "dom"], "skipLibCheck": true, }, "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"], "references": [{ "path": "./tsconfig.node.json" }] }
這三條為配置項(xiàng)
"jsx": "preserve", "jsxFactory": "h", "jsxFragmentFactory": "Fragment",
2.使用TSX
1.app.vue里的代碼
<template> <renderDom title="我是標(biāo)題" @on-click="getNum"></renderDom> </template> <script setup lang="ts"> import renderDom from "./App"; import { provide, ref } from "vue"; const data = ref(false); provide("flag", data); const getNum = (num: number) => { console.log("我接受到了", num); }; </script> <style> </style>
2.app.tsx的代碼
import { ref } from "vue"; let v = ref<string>(""); let flag = ref(false); let arr = ref([0, 1, 2, 3, 4, 5]); // tsx不會(huì)自動(dòng)結(jié)構(gòu)所以該用.value還是要使用 type Props = { title: string; }; const renderDom = (props: Props, ctx: any) => { return ( <div> <button onClick={clickEmit.bind(this,ctx)}>點(diǎn)擊emit</button> <h1>{props.title}</h1> <div> <input v-model={v.value} type="text" /> <div> <h1>{v.value}</h1> </div> </div> <div> <div v-show={flag.value}>正確的</div> <div v-show={!flag.value}>錯(cuò)誤的</div> </div> {/* <div> <div v-if={flag.value}>正確的</div> <div v-if={!flag.value}>錯(cuò)誤的</div> </div> */} {/* 不支持v-if 可用三元表達(dá)式去代替 */} <div>{flag.value ? <div>正確的</div> : <div>錯(cuò)誤的</div>}</div> {/* 不支持v-for 但可以用map循環(huán)去代替 */} {/*不支持v-bind,可以直接綁定數(shù)值 */} <div> {arr.value.map((item, i: any) => { return ( <div data-inext={i} onClick={clickIndex.bind(this, i)}> {item} </div> ); })} </div> </div> ); }; const clickIndex = (i: any) => { alert(i); }; const clickEmit=(ctx:any)=>{ ctx.emit('on-click',123) } export default renderDom;
注意:
1.tsx里面寫(xiě)的標(biāo)簽內(nèi)容是不會(huì)自動(dòng)解構(gòu)的,所以ref里面的.value還是要加上值才會(huì)出來(lái)2.tsx里面支持v-show,v-model,但不支持v-bind,v-for,v-if,所以再寫(xiě)這些的時(shí)候要更改寫(xiě)法
v-if使用三元表達(dá)式
<div>{flag.value ? <div>正確的</div> : <div>錯(cuò)誤的</div>}</div>
v-for通過(guò)map函數(shù)遍歷數(shù)組來(lái)實(shí)現(xiàn)
<div> {arr.value.map((item, i: any) => { return ( <div data-inext={i} onClick={clickIndex.bind(this, i)}> {item} </div> ); })} </div>
v-bind可以直接綁值
<div data-inext={i} onClick={clickIndex.bind(this, i)}>
props和emit使用
1.props
<renderDom title="我是標(biāo)題" @on-click="getNum"></renderDom>
(app.vue里傳值title)
type Props = { title: string; }; const renderDom = (props: Props, ctx: any)
(renderDom里面接收后可以使用,和以前一樣)
2.emit
const renderDom = (props: Props, ctx: any)
(拿到上下文)
<button onClick={clickEmit.bind(this,ctx)}>點(diǎn)擊emit</button>
(綁定方法)
const clickEmit=(ctx:any)=>{ ctx.emit('on-click',123) }
(通過(guò)emit傳值)
(以上為app.tsx文件里面)
<renderDom title="我是標(biāo)題" @on-click="getNum"></renderDom>
(綁定自定義事件)
const getNum = (num: number) => { console.log("我收到了", num); };
(拿到值去使用)
(以上為父組件收到并使用)
總結(jié)
到此這篇關(guān)于TSX常見(jiàn)簡(jiǎn)單入門(mén)用法之Vue3+Vite的文章就介紹到這了,更多相關(guān)TSX常見(jiàn)用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue3封裝一個(gè)帶動(dòng)畫(huà)的關(guān)閉按鈕示例詳解
這篇文章主要為大家介紹了vue3封裝一個(gè)帶動(dòng)畫(huà)的關(guān)閉按鈕示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09vue 中動(dòng)態(tài)綁定class 和 style的方法代碼詳解
這篇文章主要介紹了vue 中動(dòng)態(tài)綁定class 和 style的方法,通過(guò)實(shí)例結(jié)合的形式給大家接受的非常詳細(xì),需要的朋友參考下吧2018-06-06vue函數(shù)input輸入值請(qǐng)求時(shí)延遲1.5秒請(qǐng)求問(wèn)題
這篇文章主要介紹了vue函數(shù)input輸入值請(qǐng)求時(shí)延遲1.5秒請(qǐng)求問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04vue中this.$router.go(-1)失效(路由改變了,界面未刷新)
本文主要介紹了vue中this.$router.go(-1)失效(路由改變了,界面未刷新),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-12-12vue使用iframe嵌入網(wǎng)頁(yè)的示例代碼
本篇文章主要介紹了vue使用iframe嵌入網(wǎng)頁(yè)的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-03-03關(guān)于console.log打印結(jié)果是?[object?Object]的解決
這篇文章主要介紹了關(guān)于console.log打印結(jié)果是?[object?Object]的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-04-04