ホームページ >ウェブフロントエンド >Vue.js >Vue3 で JSX を使用するにはどうすればよいですか?
1.1 .vue ファイルでの jsx の使用
.jsx 形式のファイルと defineComponent## を使用します
- #defineComponent はセットアップ関数またはコンポーネント構成に渡すことができます。
- # 補間には単一の括弧を使用します。
#{}
// 父 <template> <div class="home"> <JSXDemo1 /> </div> </template> <script> import JSXDemo1 from '@/components/JSXDemo1.vue' export default { name: 'HomeView', components: { JSXDemo1 } } </script> // JSXDemo1.vue <script> import { ref } from 'vue' export default { setup () { const countRef = ref(200) const render = () => { return <p>DEMO1--{countRef.value}</p> // jsx就是js语法,所以要加 .value } return render } } </script>
// 父组件 import { defineComponent, ref } from 'vue' import JSXChild from './JSXChild.jsx' export default defineComponent(() => { // 传入 setup 函数 const countRef = ref(300) const render = () => { return <> <p>DEMO2--{countRef.value}</p> <JSXChild a={countRef.value + 100}></JSXChild> </> } return render }) // 子组件 JSXChild.jsx import { defineComponent } from 'vue' export default defineComponent({ // 传入组件配置 props: ['a'], setup (props) { const render = () => { return <> <p>child {props.a}</p> </> } return render } })
2.1 補間
#構文には大きな違いがあります:
- JSX は本質的には JS コードであり、任意のコードを使用できます。 js
- template の機能は単純な js 式のみを埋め込むことができます。その他は v-if
- JSX が ES 仕様になっているなどの命令が必要です、テンプレートは依然として Vue 独自のものです仕様
は本質的に同じです:
- は js コードにコンパイルされます(レンダリング関数)
2.2 カスタム コンポーネント
- テンプレートでは二重括弧 {{ }} を使用しています
- jsx は単一括弧 { }
// template <template> <p>{{ name }} -- {{ age }}</p> </template> // jsx const render = () => { return <> <p>child {props.a}</p> </> }
2.3 プロパティとイベントテンプレートではプロパティとイベントの書き方を区別しますが、jsx では区別しません
- テンプレートを使用します。コンポーネント名、大文字と小文字またはキャメルケースを変更できます。jsx は変更できません
- 動的パラメーターを導入します。テンプレートはコロンパラメーター名 (:msg='msg') を使用します。jsx は使用しません。コロンが必要
// template <template> <div class="home"> <watch-effect :msg="msgRef"/> </div> </template> <script> import { ref } from 'vue' import WatchEffect from '@/components/WatchEffect.vue' export default { name: 'HomeView', components: { WatchEffect, }, setup () { const msgRef = ref('123') return { msgRef } } } </script> // jsx 组件名称不可变,要和引入名字保持一致 import { defineComponent, ref } from 'vue' import JSXChild from './JSXChild.jsx' export default defineComponent(() => { const countRef = ref(300) const render = () => { return <> <p>DEMO2--{countRef.value}</p> <JSXChild a={countRef.value + 100}></JSXChild> </> } return render })
2.4条件とループ 条件付きテンプレートは v-if 命令を使用し、jsx は式で && を使用します (if( a && b) と同様)// jsx 属性和事件的写法一样 import { defineComponent, ref } from 'vue' import JSXChild from './JSXChild.jsx' export default defineComponent(() => { const countRef = ref(300) function onChange () { console.log('onChange') } const render = () => { return <> <p>DEMO2--{countRef.value}</p> <JSXChild a={countRef.value + 100} change={onChange}></JSXChild> </> } return render })
ループ テンプレートは v-for 命令を使用します。 jsx は配列// template v-if <template> <p v-if="flagRef">template demo</p> <button @click="changeFlagRef">click</button> </template> <script> import { ref } from 'vue' export default { setup () { const flagRef = ref(true) function changeFlagRef () { flagRef.value = !flagRef.value } return { flagRef, changeFlagRef } } } </script> // jsx &&符号判断 import { defineComponent, ref } from 'vue' import JSXChild from './JSXChild.jsx' export default defineComponent(() => { const flagRef = ref(true) function changeFlagRef () { flagRef.value = !flagRef.value } const render = () => { return <> <p onClick={changeFlagRef}>DEMO2--{flagRef.value.toString()}</p> {flagRef.value && <JSXChild a={flagRef.value}></JSXChild>} </> } return render })
3 の .map 関数を使用します。JSX とスロット (JSX の優位性を体験してください)// template v-for <template> <ul> <li v-for="item in state.list" :key="item">{{ item }}</li> </ul> </template> <script> import { reactive } from 'vue' export default { setup () { const state = reactive({ list: ['a', 'b', 'c'] }) return { state } } } </script> // jsx 数组 .map 函数 import { defineComponent, reactive } from 'vue' export default defineComponent(() => { const state = reactive({ list: ['a1', 'b1', 'c1'] }) const render = () => { return <> <ul> {state.list.map(item => <li>{item}</li>)} </ul> </> } return render })
- スロットは Vue によって発明された概念ですテンプレートの能力を向上させるために
- スロットは常に Vue 初心者、特にスコープ スロットの「悪夢」でした。 JSX は本質的に js
- であるため、JSX を使用すると理解しやすくなります。
以上がVue3 で JSX を使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。