日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Vue3使用JSX的方法實例(筆記自用)

瀏覽:32日期:2022-06-01 14:13:26
目錄
  • 1. Vue3 中 JSX 的基本應用
    • 1.1 在 .vue 文件中使用 jsx
    • 1.2 .jsx文件格式
  • 2. JSX 和 template 的區別
    • 2.1 插值
    • 2.2 自定義組件
    • 2.3 屬性和事件
    • 2.4 條件和循環 
  • 3. JSX 和 slot (體會 JSX 的優越性)
    • 總結 

      1. Vue3 中 JSX 的基本應用

      • 使用 .jsx 格式文件和 defineComponent
      • defineComponent 可傳入 setup 函數 或 組件的配置
      • 插值使用單括號 {}

      1.1 在 .vue 文件中使用 jsx

      // 父
       
      <template>
        <div>
          <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>
          <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的文章就介紹到這了,更多相關Vue3使用JSX內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!

      標簽: JavaScript
      日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
      久久毛片亚洲| 日本欧美一区二区在线观看| 国产一区视频在线观看免费| 欧美a一区二区| 精品91福利视频| 欧美一区二区三区高清视频| 中文字幕色婷婷在线视频| www.九色在线| 日韩免费福利视频| 亚洲欧美网站| 亚洲2区在线| 国产精品伊人| 精品成av人一区二区三区| 久久99高清| 五月精品视频| 国产日韩欧美一区二区三区在线观看| 国产精品久久久久久久久妇女| 麻豆精品蜜桃视频网站| 欧美一级鲁丝片| 九色精品91| 日韩中文字幕一区二区高清99| 国产精品大片免费观看| 色老板在线视频一区二区| 三级一区在线视频先锋| 国产第一亚洲| 欧产日产国产精品视频| 亚洲欧洲一区二区天堂久久| 国产精品v亚洲精品v日韩精品| 久久黄色影视| 精品一区二区三区中文字幕在线| 欧美羞羞视频| 一区二区三区网站| 婷婷成人在线| 国产一区2区| 好看的av在线不卡观看| 日韩精品午夜视频| 福利视频一区| 午夜国产精品视频| 久久精品 人人爱| 99久久久国产精品美女| 国产精品美女在线观看直播| 精品国产一区二| 午夜一区在线| 国产一区二区三区日韩精品| 亚洲成人二区| 欧美日韩亚洲一区二区三区在线| 成人小电影网站| 婷婷综合国产| 亚洲高清毛片| 免费在线观看一区| 亚洲欧美网站| 日韩在线二区| 国产日韩精品视频一区二区三区| 亚洲一级特黄| 欧美极品一区二区三区| 亚洲一区二区免费在线观看| 亚洲欧洲美洲av| 伊伊综合在线| 五月综合激情| 精品三级国产| 日韩精品一区二区三区免费视频 | 一区二区三区四区日韩| 日韩国产综合| 国产精品sm| 日韩精品中文字幕吗一区二区| 五月天久久久| 久久裸体视频| 国产成人精品一区二区三区视频| 亚洲91在线| 丝袜亚洲另类欧美| 午夜影院一区| 精品中文在线| 日韩成人精品一区二区三区| 狠狠色狠狠色综合日日tαg| 精品国产一级| 欧美一级二区| 亚洲2区在线| 亚洲一级在线| 成人av动漫在线观看| 欧美1区二区| 国产九九精品| 日本欧美在线| 97久久超碰| 亚洲1区在线| 蜜桃91丨九色丨蝌蚪91桃色| 九一精品国产| 亚洲精品成人| 午夜日本精品| aⅴ色国产欧美| 99国产精品私拍| 九一精品国产| 久久一区二区三区电影| 日韩精品欧美大片| 免费看欧美美女黄的网站| 九九综合在线| 一区免费视频| 中文久久精品| 久久aⅴ国产紧身牛仔裤| 国产亚洲综合精品| 在线一区电影| 日韩精品看片| 1000部精品久久久久久久久| 黑森林国产精品av| 久久影院一区二区三区| 久久97视频| 日本一二区不卡| 国产精品久久| 日韩高清中文字幕一区| 亚洲免费福利一区| 日韩一区网站| 亚洲精品自拍| 国产精品网在线观看| 久久亚洲人体| 欧美日韩视频免费观看| 香蕉久久精品| 日韩一级不卡| 日韩精品三级| 一区二区精品伦理...| 国产亚洲人成a在线v网站| 国产精品一区毛片| 韩国女主播一区二区三区| 黄色aa久久| 免费国产自线拍一欧美视频| 日韩av在线免费观看不卡| 久久97视频| 亚洲二区在线| 日韩高清欧美激情| 成人污污视频| 欧美精品一区二区久久| 亚洲在线久久| 久久精品 人人爱| 日韩欧美少妇| 蜜桃视频在线观看一区二区| 国产欧美一区二区三区米奇| 中国字幕a在线看韩国电影| 精品在线播放| 国产免费播放一区二区| 青青青免费在线视频| 国产亚洲精品久久久久婷婷瑜伽| 日本精品国产| 亚洲精品一区三区三区在线观看| 国产模特精品视频久久久久| 国产精品一区亚洲| 亚洲欧美伊人| 国产精品夜夜夜| 日韩精品网站| 91欧美极品| 久久精品国产www456c0m| 日本不卡不码高清免费观看 | 99亚洲视频| 精品一区视频| 中文字幕日韩亚洲| 日韩一区欧美| 国产欧美日韩一级| 中文精品视频| 综合日韩在线| 97精品国产99久久久久久免费| 久久精品99国产精品日本| 青青久久av| 91嫩草精品| 伊人影院久久| 精品亚洲成人| 亚洲天堂免费| 日韩欧美看国产| 国产日韩欧美一区二区三区 | 欧美在线精品一区| 99tv成人| 久久精品福利| 欧美在线观看天堂一区二区三区| 亚洲大全视频| 激情国产在线| 国产精品免费99久久久| 首页欧美精品中文字幕| 韩国三级一区| 久久99国产精品视频| 日韩国产一区二| 自拍日韩欧美| 日韩视频网站在线观看| 国产精品综合色区在线观看| 国产成人黄色| 波多视频一区| 蜜桃精品视频| 日韩一区二区三区在线看| av亚洲在线观看| 日韩大片在线| 精品国产18久久久久久二百| 欧美日韩伊人| 日本不卡视频一二三区| 中文字幕一区二区精品区| 中文在线一区| 婷婷综合网站| 国产高清一区| 久久精品国产www456c0m| 国产欧美一区二区三区精品酒店| 久久久亚洲欧洲日产| 日韩欧美中文在线观看| 免费人成黄页网站在线一区二区| 国产亚洲毛片在线| 亚洲欧美日韩国产一区二区| 99国产精品自拍|