91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在Vue3中使用JSX

發布時間:2023-05-11 11:17:06 來源:億速云 閱讀:186 作者:zzz 欄目:編程語言

今天小編給大家分享一下怎么在Vue3中使用JSX的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

    1. Vue3 中 JSX 的基本應用

    • 使用 .jsx 格式文件和 defineComponent

    • defineComponent 可傳入 setup 函數 或 組件的配置

    • 插值使用單括號 {}

    1.1 在 .vue 文件中使用 jsx
    // 父
     
    <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>
    1.2 .jsx文件格式
    // 父組件
     
    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. JSX 和 template 的區別

    • 語法上有很大區別

    • JSX 本質就是 js 代碼,可以使用 js 的任何能力

    • template 只能嵌入簡單的 js 表達式,其他需要指令,如 v-if

    • JSX 已經成為 ES 規范,template 還是 Vue 自家規范

    • 本質是相同的:

    • 都會被編譯為 js 代碼(render 函數)

    2.1 插值
    • template 使用雙括號 {{ }}

    • jsx 使用單括號 { }

    // template
     
    <template>
      <p>{{ name }} -- {{ age }}</p>
    </template>
     
    // jsx
     
    const render = () => {
        return <>
            <p>child {props.a}</p>
        </>
    }
    2.2 自定義組件
    • template 組件名使用時可改變大小寫或是駝峰,jsx 不可更改

    • 引入動態參數,template使用冒號+參數名(: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.3 屬性和事件
    template 區分屬性和事件的寫法,jsx 不區分
    // 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
    })
    2.4 條件和循環
    條件 template 使用 v-if 指令,jsx 在表達式中使用 && (類似 if( a && b))
    // 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
    })
    循環 template 使用 v-for 指令,jsx 使用數組的 .map 函數
    // 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
    })

    3. JSX 和 slot (體會 JSX 的優越性)

    • slot 是 Vue 發明的概念,為了完善 template 的能力

    • slot 一直是 Vue 初學者的“噩夢”,特別是:作用域 slot

    • 但使用 JSX 將很容易理解,因為 JSX 本質就是 js

    以上就是“怎么在Vue3中使用JSX”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    鄂尔多斯市| 保德县| 军事| 聂拉木县| 兴安盟| 铅山县| 盱眙县| 余姚市| 靖宇县| 高尔夫| 普定县| 边坝县| 化州市| 永济市| 贵南县| 长宁区| 宁远县| 普兰店市| 临夏市| 建瓯市| 北京市| 横山县| 甘洛县| 会昌县| 讷河市| 上虞市| 宁化县| 白朗县| 尼木县| 苍南县| 蕲春县| 黑山县| 榆社县| 南城县| 聊城市| 大连市| 武宁县| 广西| 承德市| 肇东市| 临澧县|