国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

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

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

瀏覽:17日期: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
      主站蜘蛛池模板: 欧美最新的精品videoss | 亚洲偷自拍另类图片二区 | 免费一级毛片在播放视频 | 搞黄网站免费观看 | 色综久久| 麻豆传媒一区 | 亚洲成人免费 | 日韩 欧美 中文 亚洲 高清 在线 | 亚洲人在线播放 | 欧美综合精品一区二区三区 | 久久久久亚洲国产 | 免费日本在线视频 | 亚洲视频免费在线看 | 国产片自拍 | 亚洲国产成人精品区 | 日韩在线播放视频 | 在线视频欧美亚洲 | 久9久9精品视频在线观看 | 国产一级小视频 | 欧美午夜伦y4480私人影院 | 日本三片在在线播放 | 91日本在线观看亚洲精品 | 国产一级做a爱免费观看 | 日韩欧美中文字幕在线观看 | 久久国产成人精品麻豆 | 国产高清天干天天视频 | 免费观看日本特色做爰视频在线 | 国产91一区二区在线播放不卡 | 亚洲精品久久久久综合中文字幕 | 久久久久成人精品一区二区 | 成人免费在线网站 | 亚洲图片国产日韩欧美 | 两性色午夜视频免费国产 | 美女张开腿黄网站免费 | 国产浮力第一页草草影院 | 国产欧美另类久久久精品免费 | 成人三级在线播放线观看 | 国产孕妇孕交视频 | 精品国产一区二区三区2021 | 99成人国产精品视频 | 国产午夜精品不卡视频 |