Heim > Web-Frontend > View.js > Hauptteil

Wie verwende ich JSX mit Vue3?

WBOY
Freigeben: 2023-05-09 21:09:19
nach vorne
2241 Leute haben es durchsucht

    1. Die Basisanwendung von JSX in Vue3

    • verwendet eine Datei im .jsx-Format und defineComponent

    • defineComponent kann an die Setup-Funktion oder Komponentenkonfiguration übergeben werden

    • Verwenden Sie einzelne Klammern für Werte {}

    1.1 Verwendung von jsx in .vue-Dateien

    // 父
     
    <template>
      <div class="home">
        <JSXDemo1 />
      </div>
    </template>
     
    <script>
    import JSXDemo1 from &#39;@/components/JSXDemo1.vue&#39;
    export default {
      name: &#39;HomeView&#39;,
      components: {
        JSXDemo1
      }
    }
    </script>
     
    // JSXDemo1.vue
     
    <script>
    import { ref } from &#39;vue&#39;
    export default {
      setup () {
        const countRef = ref(200)
     
        const render = () => {
          return <p>DEMO1--{countRef.value}</p> // jsx就是js语法,所以要加 .value
        }
        return render
      }
    }
    </script>
    Nach dem Login kopieren

    1.2 .jsx-Dateiformat

    // 父组件
     
    import { defineComponent, ref } from &#39;vue&#39;
    import JSXChild from &#39;./JSXChild.jsx&#39;
     
    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 &#39;vue&#39;
     
    export default defineComponent({ // 传入组件配置
      props: [&#39;a&#39;],
      setup (props) {
        const render = () => {
          return <>
            <p>child {props.a}</p>
          </>
        }
        return render
      }
    })
    Nach dem Login kopieren

    2. Der Unterschied zwischen JSX und Vorlage

    • Es gibt einen großen Unterschied in der Syntax:

    • JSX ist im Wesentlichen JS-Code, Sie können jede Fähigkeit von JS nutzen

    • Vorlage kann nur einfache JS-Ausdrücke einbetten, andere Anweisungen sind erforderlich, wie z. B. v-if

    • JSX ist geworden eine ES-Spezifikation und die Vorlage ist immer noch Vues eigene. Die Spezifikationen

    • sind im Wesentlichen die gleichen:

    • werden in js-Code kompiliert (Renderfunktion)

    2.1 Interpolation

    • Vorlage verwendet doppelte Klammern {{ }}

    • jsx verwendet einfache Klammern { }

    // template
     
    <template>
      <p>{{ name }} -- {{ age }}</p>
    </template>
     
    // jsx
     
    const render = () => {
        return <>
            <p>child {props.a}</p>
        </>
    }
    Nach dem Login kopieren

    2.2 Benutzerdefinierte Komponenten

    • Der Name der Vorlagenkomponente kann in Groß- und Kleinschreibung geändert werden. Bei Verwendung kann jsx nicht geändert werden

    • Dynamische Parameter einführen, Vorlage verwendet Doppelpunkt + Parameter Name (:msg='msg'), jsx benötigt keinen Doppelpunkt

    // template
     
    <template>
      <div class="home">
        <watch-effect :msg="msgRef"/>
      </div>
    </template>
     
    <script>
    import { ref } from &#39;vue&#39;
    import WatchEffect from &#39;@/components/WatchEffect.vue&#39;
    export default {
      name: &#39;HomeView&#39;,
      components: {
        WatchEffect,
      },
      setup () {
        const msgRef = ref(&#39;123&#39;)
        return {
            msgRef
        }
      }
    }
    </script>
     
    // jsx 组件名称不可变,要和引入名字保持一致
     
    import { defineComponent, ref } from &#39;vue&#39;
    import JSXChild from &#39;./JSXChild.jsx&#39;
     
    export default defineComponent(() => {
      const countRef = ref(300)
     
      const render = () => {
        return <>
          <p>DEMO2--{countRef.value}</p>
          <JSXChild a={countRef.value + 100}></JSXChild>
        </>
      }
      return render
    })
    Nach dem Login kopieren

    2.3 Eigenschaften und Ereignisse

    Vorlage unterscheidet die Schreibmethode von Eigenschaften und Ereignissen, jsx unterscheidet nicht
    // jsx 属性和事件的写法一样
     
    import { defineComponent, ref } from &#39;vue&#39;
    import JSXChild from &#39;./JSXChild.jsx&#39;
     
    export default defineComponent(() => {
      const countRef = ref(300)
     
      function onChange () {
        console.log(&#39;onChange&#39;)
      }
      const render = () => {
        return <>
          <p>DEMO2--{countRef.value}</p>
          <JSXChild a={countRef.value + 100} change={onChange}></JSXChild>
        </>
      }
      return render
    })
    Nach dem Login kopieren

    2.4 Bedingungen und Schleifen

    Bedingte Vorlage verwendet v-if-Anweisung, jsx verwendet && (ähnlich wie if( a && b)) in Ausdrücken
    // template v-if
     
    <template>
      <p v-if="flagRef">template demo</p>
      <button @click="changeFlagRef">click</button>
    </template>
    <script>
    import { ref } from &#39;vue&#39;
    export default {
      setup () {
        const flagRef = ref(true)
     
        function changeFlagRef () {
          flagRef.value = !flagRef.value
        }
     
        return {
          flagRef,
          changeFlagRef
        }
      }
    }
    </script>
     
    // jsx &&符号判断
     
    import { defineComponent, ref } from &#39;vue&#39;
    import JSXChild from &#39;./JSXChild.jsx&#39;
     
    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
    })
    Nach dem Login kopieren
    Schleifenvorlage verwendet v-for-Anweisung, jsx verwendet Array .map-Funktion
    // template v-for
     
    <template>
      <ul>
        <li v-for="item in state.list" :key="item">{{ item }}</li>
      </ul>
    </template>
    <script>
    import { reactive } from &#39;vue&#39;
    export default {
      setup () {
        const state = reactive({
          list: [&#39;a&#39;, &#39;b&#39;, &#39;c&#39;]
        })
     
        return {
          state
        }
      }
    }
    </script>
     
    // jsx 数组 .map 函数
     
    import { defineComponent, reactive } from &#39;vue&#39;
     
    export default defineComponent(() => {
      const state = reactive({
        list: [&#39;a1&#39;, &#39;b1&#39;, &#39;c1&#39;]
      })
     
      const render = () => {
        return <>
          <ul>
            {state.list.map(item => <li>{item}</li>)}
          </ul>
        </>
      }
      return render
    })
    Nach dem Login kopieren

    3. JSX und Slot (JSX-Vorteile erleben)

    • Slot ist ein von Vue erfundenes Konzept, um die Fähigkeit von Templates zu verbessern.

    • Slot war schon immer ein „Albtraum“. Vue-Anfänger, insbesondere: Scope-Slot

    • Aber die Verwendung von JSX wird sehr schwierig sein. Leicht zu verstehen, da JSX im Wesentlichen js ist

    Das obige ist der detaillierte Inhalt vonWie verwende ich JSX mit Vue3?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Verwandte Etiketten:
    Quelle:yisu.com
    Erklärung dieser Website
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
    Beliebte Tutorials
    Mehr>
    Neueste Downloads
    Mehr>
    Web-Effekte
    Quellcode der Website
    Website-Materialien
    Frontend-Vorlage