<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      vue3

      介紹

      1.性能的提升
          打包大小減少41%
          初次渲染快55%, 更新渲染快133%
          內(nèi)存減少54%
      2.源碼的升級(jí)
          使用Proxy代替defineProperty實(shí)現(xiàn)響應(yīng)式
          重寫虛擬DOM的實(shí)現(xiàn)和Tree-Shaking
      3.擁抱TypeScript
          Vue3可以更好的支持TypeScript
      4.新的特性
          Composition API(組合API)
              setup配置
              ref與reactive
              watch與watchEffect
              provide與inject
          新的內(nèi)置組件
              Fragment
              Teleport
              Suspense
          其他改變
              新的生命周期鉤子
              data 選項(xiàng)應(yīng)始終被聲明為一個(gè)函數(shù)
              移除keyCode支持作為 v-on 的修飾符
      
      5 組合式API和配置項(xiàng)API
        使用組合式API
        配置項(xiàng)API
        { name:'xx',
         data:function(){},
          methods:{}}
      

      創(chuàng)建方式

      1.方式一:vue-cli:創(chuàng)建vue2和vue3  
      2.方式二:vite:創(chuàng)建vue3,創(chuàng)建最新
        2.1 命令:npm init vue@latest
        2.2 npm init vite-app <project-name>
        2.3 進(jìn)入項(xiàng)目目錄
            cd <project-name>
        2.4 安裝依賴
            npm install
        2.5 運(yùn)行
            npm run dev
      注:vue3中的this不是vc對(duì)象 是一個(gè)代理對(duì)象
      

      setup函數(shù)

      1.vue 新增的setup配置項(xiàng)函數(shù),
        在里面可以定義變量
        定義函數(shù)
        必須return 變量和函數(shù),在模板中才能使用
      2.代碼:
       2.1 組件
          <template>
            <h1>setup函數(shù)</h1>
            {{ name }}
            {{info}}
          <button @click="handleClick">點(diǎn)我</button>
          </template>
          <script>
          export default {
            name: "setup",
            setup(){
              let name='lili'
              let info={
                age:10
              }
              function handleClick(){
                alert('123')
              }
              return{
                name,handleClick,info
              }
            }
          }
          </script>
         2.2 app.vue
              <template>
              <handleSetUp></handleSetUp>
              </template>
      
              <script>
              import handleSetUp from "@/components/setUp.vue"
              export default {
                name: "setup",
                components:{
                  handleSetUp
                }
              }
              </script>
      

      ref和reactive

      1.導(dǎo)入使用:import {ref, reactive} from 'vue'
      2.ref:基本數(shù)據(jù)類型添加響應(yīng)式(動(dòng)態(tài)綁定)
        取值:在js中通過對(duì)象(RefImpl對(duì)象--定義的變量名).value
      3.reactive:對(duì)象、數(shù)組使用
      注:ref也可以使用在對(duì)象上--但是取值必須通過.value獲取
      4.代碼:
        4.1 ref使用:
          <template>
            <h1>ref使用</h1>
            {{ name }}
            {{info.age}}
          <button @click="handleClick">點(diǎn)我姓名加?</button>
            <button @click="handleUp">點(diǎn)我年齡加1</button>
          </template>
          <script>
          import {ref, reactive} from "vue";
          export default {
            name: "setup",
            setup(){
              let name=ref('lili')
              let info=ref({
                age:10
              })
              function handleClick(){
                name.value=name.value+'?'
                console.log(name)
              }
              function handleUp(){
                info.value.age++
                console.log(info.value.age)
              }
              return{
                name,handleClick,info, handleUp
              }
            }
          }
          </script>
      4.2 reactive使用:
          <template>
            <h1>reactive使用</h1>
            {{info.age}}
          <button @click="handleClick">點(diǎn)我姓名加?</button>
            <button @click="handleUp">點(diǎn)我年齡加1</button>
          </template>
          <script>
          import {ref, reactive} from "vue";
          export default {
            name: "setup",
            setup(){
                let info=reactive({
                age:10
              })
              function handleClick(){
                name.value=name.value+'?'
                console.log(name)
              }
              function handleUp(){
                info.age++
                console.log(info.age)
              }
              return{
                name,handleClick,info, handleUp
              }
            }
          }
          </script>
      

      計(jì)算和監(jiān)聽屬性

      計(jì)算屬性

      <template>
      {{person.FullName}}
      </template>
      <script>
      import {ref, reactive, computed} from "vue"
      export default {
        name: "計(jì)算屬性",
          //案例一
        // computed:{
        //   FullName:function (){}
        // },
        setup(){
          // let FirstName = ref('zhao')
          // let LastName = ref('qin')
          // let FullName = computed(()=>{
          //   return FistName.value + LastName.value
          // })
            //案例二
          let person = reactive({
            FirstName:'zhao',
            LastName:'qin'
          })
              person.FullName = computed({
            get() {
              return person.FirstName + '-' + person.LastName
            },
            set(value) {
              console.log(value)
              const nameArr = value.split('-')
              person.FirstName = nameArr[0]
              person.LastName = nameArr[1]
            }
          })
          return{
            person
          }
        }
      }
      </script>
      

      監(jiān)聽屬性

      1.監(jiān)聽屬性:watch、
      <template>
      {{name}}
      </template>
      
      <script>
      import {ref,watch,watchEffect} from "vue";
      
      export default {
        name: "監(jiān)聽屬性",
        setup(){
          let name=ref('lili')
           watch(name, (newValue, old) => {
            console.log('name變了')
           console.log(old)
            console.log(newValue)
          })
            //vue3 多的watchEffect,只要函數(shù)中使用的變量發(fā)生變化,它就會(huì)觸發(fā)
          watchEffect(() => {
            // 只要該函數(shù)中使用的變量發(fā)生變化,它就會(huì)觸發(fā)
            let a = name.value + '?'
            console.log('watchEffect配置的回調(diào)執(zhí)行了')
          })
          return {
            name
          }
        }
      }
      </script>
      

      生命周期

      1.Vue3.0中可以繼續(xù)使用Vue2.x中的生命周期鉤子,但有有兩個(gè)被更名:
          beforeDestroy改名為 beforeUnmount
          destroyed改名為 unmounted
      2.Vue3.0也提供了 Composition API 形式的生命周期鉤子,與Vue2.x中鉤子對(duì)應(yīng)關(guān)系如下:
          beforeCreate===>setup()
          created=======>setup()
          beforeMount ===>onBeforeMount
          mounted=======>onMounted
          beforeUpdate===>onBeforeUpdate
          updated =======>onUpdated
          beforeUnmount ==>onBeforeUnmount
          unmounted =====>onUnmounted
      

      hooks

      1.什么是hook?
        本質(zhì)是一個(gè)函數(shù),把setup函數(shù)中使用的Composition API進(jìn)行了封裝。
        類似于vue2.x中的mixin。
        自定義hook的優(yōu)勢(shì): 復(fù)用代碼, 讓setup中的邏輯更清楚易
      2.代碼:
        2.1 hook(類似于父類)
              import {onMounted, onUnmounted, reactive} from "vue";
              export default function () {
                  let p = reactive({
                      x: 0,
                      y: 0
                  })
                  function getPoint(event) {
                      console.log(event)
                      p.x = event.pageX
                      p.y = event.pageY
                  }
                  // 聲明周期鉤子的onMounted,當(dāng)頁面掛載就會(huì)執(zhí)行
                  onMounted(() => {
                      // 給數(shù)鼠標(biāo)點(diǎn)擊增加監(jiān)聽,當(dāng)點(diǎn)擊鼠標(biāo),就會(huì)執(zhí)行這個(gè)函數(shù)
                      window.addEventListener('click', getPoint)
                  })
                  // 組件被銷毀時(shí),把功能去掉
                  onUnmounted(() => {
                      window.removeEventListener('click', getPoint)
                  })
                  return p
              }
        2.2 在使用的組件中導(dǎo)入
          <template>
            <h2>x坐標(biāo)是:{{ p.x }},y坐標(biāo)是:{{ p.y }}</h2>
          </template>
      
          <script>
          import {reactive, onMounted, onUnmounted} from 'vue'
          import usePoint from '../hook/uesPoint.js'
          export default {
            name: "Point",
            setup() {
              let p = usePoint()
              return {p}
            }
          }
          </script>
      

      toRefs

      1.setup函數(shù),return {...toRefs(data)}可以解壓復(fù)制
          export default {
            name: 'App',
            setup() {
              let data = reactive({
                name: 'liil',
                age: 19,
                isShow: true
              })
      
              function handleShow() {
                data.isShow = !data.isShow
                data.age++
              }
              return {
                ...toRefs(data),
                handleShow
                // data
              }
            }
          }
      

      后臺(tái)管理模板

      1.vue-admin-template-master
        package.json 第7行加入
        "dev": "set NODE_OPTIONS=--openssl-legacy-provider & vue-cli-service serve",
      2.java版的若依,帶權(quán)限控制的后臺(tái)管理模塊
      3.python :django-vue-admin   
      4.python flask-vue-admin
      5.go:gin-vue-admin
      
      主站蜘蛛池模板: 国产SM重味一区二区三区| 峡江县| 忘忧草在线社区www中国中文| 欧美牲交a欧美牲交aⅴ免费真| 青草国产超碰人人添人人碱| 九江县| 99久久精品国产亚洲精品| 婷婷久久综合九色综合88| 久久综合五月丁香六月丁香| 国产在线亚州精品内射| 久操资源站| 1精品啪国产在线观看免费牛牛| 黑人巨大精品欧美一区二区| 国产福利微视频一区二区| 孝义市| 精品亚洲女同一区二区| 免费99视频| 亚洲另类无码一区二区三区| 亚洲成人一区二区av| 98精品全国免费观看视频| 日韩亚洲精品国产第二页| 天堂中文8资源在线8| 亚洲综合精品一区二区三区| 美女自卫慰黄网站| 中文字幕在线国产精品| 72种姿势欧美久久久久大黄蕉| 看全黄大色黄大片视频| 亚洲中文无码手机永久| 亚洲国产精品久久久久婷婷老年| 在线国产精品中文字幕| 亚洲国产性夜夜综合| 老熟妇乱子交视频一区| 高清美女视频一区二区三区| 亚洲国产色婷婷久久99精品91| 国产亚洲精品超碰热| 日韩国产中文字幕精品| 久久精品免视看国产成人| 中文字幕无码免费不卡视频| 九九综合va免费看| 精品亚洲国产成人| 国精一二二产品无人区免费应用|