• vue 3.0与2.0的区别


    vue3新特性
    1/数据响应式原理重新实现(ES6 proxy 代替了ES5的Object.defineProperty) Vue.set()
    解决了:例如数据更新检测bug vue2的push,shift 不是原生js的方法,vue二次封装了
    大大优化了响应式监听的性能(可以监听复杂的数据类型)
    2.虚拟dom-新算法(更快,更小)
    3.提供了composition api ,可以更好的 逻辑复用
    4.模版可以有多个根元素
    5.源码typescript重写,有更好的类型推导
    6.移除了过滤器 推荐使,计算属性

    vite的使用
    vite低配版的vue-cli,企业做项目还是用vue-cli

    npm init vite-app demo

    在main.js入口挂载

    2.0版本
    创建vue实例 new Vue({})
    创建路由实例 new VueRouter()
    创建仓库 new Vuex.Store()

    3.0版本
    import { createApp } from 'vue'
    import App from './App.vue'

    创建vue实例 createApp(App).mount('#app')
    创建路由实例 createRouter()
    创建仓库 createStore()

    在体验

    在vue2 是options API (单项API)

     vue3.0是 composition API 组合式api

    import { setup, reactive ,ref,computed,toRefs,watch } from 'vue'

    1.setup函数 入口

    2.reactive 函数 ,让复杂数据类型变成响应式

    3.ref函数,将基本数据类型变成响应式

    4.toRefs-解构保留响应式状态

    5.readonly 让数据变成只读状态

    //setup函数是当前组件入口函数,compositionAPI的起点(入口)

    //生命周期比所有的钩子函数都要早,比之前的beforeCreate这个钩子都要早

    //setup函数没有this,结果是undefined

    export default {
       setup(){
    
    
      }      
    }

    //setup函数中定义的数据/方法 ...计算属性...都需要返回

    //setup函数中定义的数据默认不是响应式的

    //如果定义的复杂数据类型需要是响应式的,就必须要用reactive()函数包裹 数组,对象

    //如果将基本数据类型处理成响应式,就需要用到ref()函数

    export default {
       setup() {
         //const obj = {name:'zs',age:12}
         const obj = reactive({name:'zs',age:12})  
    //const money = reactive(100) 报错
    const changeName =()=>{ obj.name ='李四' console.log(obj) } } return { obj, changeName,
    //money 报错不用 } }

    ref()函数

    作用:将简单类型数据,转换成响应式对象

    1/ref函数接受一个简单类型的值,返回一个可改变的ref响应式对象,返回的对象有唯一的属性 value

    2/在setup函数中,通过ref对象的value属性,可以访问到值

    3/在模版中,ref属性会自动解套,不需要额外的.value

    const money  = ref(100)
    const changeMoney = () => {
      money.value = 0
    }

    //如果将数据定义到一个整体对象中,直接return这个对象,结构中使用多.几次

    //如果不想结构中写的很繁琐,可以解构,但是解构后有的数据会丢失响应式状态

    //解决方式:使用toRefs()函数包裹数据,再进行解构

    const bigObj = {
        obj:{name:'zs',age:12}
        str:'这是测试',
    money:100 }
    return { ...toRefs(bigObj) //如果不这么写,直接解构,会造成响应式状态丢失 }

     //不想某些数据发生变化,只允许读取,可以使用readonly函数进行处理

    export default {
      setup()  {
        const obj = reactive(name:'zs',age:12)
        const zobj = readonly(obj)
        const changeName = () =>{
           zobj.name = 'lisi'   //去执行后会有一个警告,不允许修改的
       }
        return  {
          zobj,
          changeName
       }
       
      }
    }

    vue3.0 的 计算属性

    const nextAge = computed({
        return +age.value +1 
    })
    const age = ref(100)
    const nextAge = computed({
       get(){
          return +age.value +1
       },
       set(val)
      {
           age.value = newValue -1 
      }
    })
    
    return {
       nextAge
    }

    vue3.0的watch(数据源,处理方法,配置对象)

    //监听对象中的某个属性 (监听不需要写在返回)
    watch(()=>bigObj.people,(newValue)=>{
      console.log(newValue)
    },{deep:true,immediate})

    vue3.0的生命周期对比图

    //vue3中的钩子函数,不在使用beforeCreate 和 created ,而是用setup,setup中没有this

    //

    setup(){
    //功能a模块的钩子
      onBeforeMount(()=>{
         console.log('挂在前')
      })
      onMounted(()=>{
         console.log('挂载dom结构-2')
      })
      //功能b模块的钩子
      onBeforeMount(()=>{
         console.log('挂在前-3')
      })
      onMounted(()=>{
         console.log('挂载dom结构-4')
      })
    }
    
    因为是函数,可以多次调用,上面的执行顺序是  1,3,2,4

    vue3.0父传子的方式

    export default {
      props: {
        money:{
          type:Number,
          default:0
       }
      }
      setup(props,context)
     {
        
      const changeMoney =() =>{
         context.emit('change',12)
       }
       return 
       {
          changeMoney
        }
     }
    }

    vue3中也有依赖注入 provide 和 inject

    vue2中使用this.$refs.xxx获取dom

    在vue3.0中需要声明一个ref

    <template>
       <h1 ref ="hRef"></h1>
    </template>
    
    export default
    {
    
      setup(){
    
    
      const hRef = ref(null) //注意,这里的hRef 和上面的要一致
      onMounted(()=>{
         console.log(hRef.value) // .value 获取dom元素
      })
      
     }
    }
  • 相关阅读:
    Linux上Nginx部署配置--二级域名配置
    Android-Gallery GridView ImageSwitcher 使用
    Android:控件布局(相对布局)RelativeLayout(转)
    Win10 安装msi 提示2502、2503的错误代码 -- 命令提示符(管理员) -- msiexec /package
    storm 入门原理介绍_AboutYUN
    storm入门教程 第一章 前言
    Hbase存储详解
    浅谈设计模式
    Hadoop分布式文件系统--HDFS结构分析
    YARN源码分析(一)-----ApplicationMaster
  • 原文地址:https://www.cnblogs.com/zmztya/p/14688908.html
Copyright © 2020-2023  润新知