Di sini kami mengambil projek vite sebagai contoh Untuk menggunakan JSX dalam projek, kami perlu memasang pemalam@vitejs/plugin-vue-jsx
ini membolehkan kami menggunakan JSX/TSX dalam projek
npm i @vitejs/plugin-vue-jsx -D
Selepas pemasangan selesai, cuma lakukan konfigurasi dalam 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()], });
Seterusnya kita Mari kita lihat cara menggunakan JXS
Pertama sekali, cara pertama ialah menggunakannya dalam fail .vue
Anda perlu menetapkan lang skrip ke tsx
dan kembalikan templat
<script lang="tsx"> import { defineComponent } from "vue"; export default defineComponent({ name: "app", setup(props, ctx) { return () => <div>Hello World</div>; }, }); </script>
import { defineComponent } from "vue"; export default defineComponent({ name: "app", setup(props, ctx) { return () => <div>Hello World</div>; }, });
.vue
Pada masa ini, .tsx
< akan dipaparkan pada halaman komponen berfungsi, Vue melepasi prop sebagai parameter pertama Parameter kedua ctx mengandungi tiga atribut: attrs, emit dan slots. Ia masing-masing bersamaan dengan atribut attrs, attrs, attrs, emit dan $slots bagi contoh komponen. .tsx
//main.ts中引入 import { createApp } from "vue"; import "./style.css"; import App from "./App"; createApp(App).mount("#app");
//App.tsx export default (props, ctx) => <div>Hello World</div>;
Hello World
Pada masa ini , halaman Dua komponen yang kami takrifkan muncul Seterusnya mari kita lihat penggunaan khusus JSX dalam vue Interpolasidalam Apabila menggunakan interpolasi dalam SFC, kita boleh menggunakan
untuk membungkus, manakala dalam JSX, kita menggunakanuntuk membungkus, seperti
const Component1 = () => <div>Component1</div>; const Component2 = () => <div>Component2</div>; export default () => ( <div> <Component1 /> <Component2 /> </div> );
{{}}
pemaparan bersyarat (v-jika) {}
untuk pemaparan bersyarat, seperti .value
import { defineComponent, ref } from "vue"; export default defineComponent({ name: "app", setup(props, ctx) { const text = ref("Hello World"); return () => <div>{text.value}</div>; }, });
.value
Dalam JSX, tidak ada , tetapi kaedah penulisan yang lebih dekat dengan asli <div> <div v-if="showyes">yes</div> <span v-else>no</span> </div>
, anda mungkin juga berfikir kaedah pemaparan bersyarat lain v-if
, dalam JSX Ia menyokong
import { defineComponent, ref } from "vue"; export default defineComponent({ name: "app", setup(props, ctx) { const showyes = ref(true); return () => <div>{showyes.value ? <div>yes</div> : <div>no</div>}</div>; }, });
gelung senarai (v-untuk) menggunakan v-if
Dalam SFC kami sering menggunakan v-if
untuk pemaparan gelung senarai, seperti v-show
import { defineComponent, ref } from "vue"; export default defineComponent({ name: "app", setup(props, ctx) { const showyes = ref(true); return () => ( <div> <div v-show={showyes.value}>yes</div> <div v-show={!showyes.value}>no</div> </div> ); }, });
v-show
dan Dalam JSX, kita perlu menukar kepada menggunakan peta untuk pemaparan gelung senarai<ul> <li v-for="{ index, item } in list" :key="index">{{ item }}</li> </ul>
Pengikatan acara v-for
, dalam SFC, gunakan
atauuntuk event binding, manakala dalam JSX, gunakan.
untuk mengikat acaraimport { defineComponent, ref } from "vue"; export default defineComponent({ name: "app", setup(props, ctx) { const list = ref(["one", "two", "three"]); return () => ( <div> {list.value.map((item, index) => ( <div key={index}>{item}</div> ))} </div> ); }, });
click
pengubah acara @click
v-on:click
Pengubah suai acara boleh ditetapkan menggunakan onClick
disediakan oleh vue, seperti
import { defineComponent, ref } from "vue"; export default defineComponent({ name: "app", setup(props, ctx) { return () => ( <div onClick={() => { console.log("我被点击"); }} > 点击 </div> ); }, });
import { defineComponent, ref, withModifiers } from "vue"; export default defineComponent({ name: "app", setup(props, ctx) { return () => ( <div onClick={withModifiers(() => { console.log("我被点击"); }, ["self"])} > 点击 </div> ); }, });
withModifiers
v-model .self
v-model sebenarnya serupa dengan SFC apabila digunakan dalam mengikat atau dalam withModifiers
tag .once
import { defineComponent } from "vue"; export default defineComponent({ name: "app", setup(props, ctx) { return () => ( <div onClickOnce={() => { console.log("我被点击"); }} > 点击 </div> ); }, });
, komponen ini menghantar kaedah modelValue
dan input
pembolehubah komponen induk perlu menerima parameter yang diluluskan oleh
msg
SFC:v-model:msg
import { defineComponent, ref } from "vue"; export default defineComponent({ name: "app", setup(props, ctx) { const num = ref(0); return () => <input type="text" v-model={num.value} />; }, });
ea_button
JSX:update:changeMsg
<ea-button v-model:changeMsg="msg"></ea-button>
msg
Slotupdate:changeMsg
Mari kita lihat pada slot lalai dahulu. komponen Anak untuk menerima slot lalai<ea-button v-model={[msg.value, 'changeMsg']}></ea-button>
import { defineComponent, ref } from "vue"; const Child = (props, { slots }) => { return <div>{slots.default()}</div>; }; export default defineComponent({ name: "app", setup(props, ctx) { const num = ref(0); return () => <Child>默认插槽</Child>; }, });
import { defineComponent, ref } from "vue"; //@ts-ignore const Child = (props, { slots }) => { return ( <div> <div>{slots.slotOne()}</div> <div>{slots.slotTwo()}</div> <div>{slots.slotThree()}</div> </div> ); }; export default defineComponent({ name: "app", setup(props, ctx) { const num = ref(0); return () => ( <Child> {{ slotOne: () => <div>插槽1</div>, slotTwo: () => <div>插槽2</div>, slotThree: () => <div>插槽3</div>, }} </Child> ); }, });
berada dalam sub-. pembolehubah, kami menghantarnya ke kandungan slot komponen induk melalui
Atas ialah kandungan terperinci Cara menggunakan jsx/tsx dalam Vue3. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!