首页 > 其他分享 >vue框架08 vue3

vue框架08 vue3

时间:2023-02-22 21:33:37浏览次数:37  
标签:vue name setup value let vue3 ref 08

vue3的介绍

# vue项目的版本,新项目使用vue3,部分老项目使用vue2

# vue3的变化
    1.性能的提升
       - 打包大小减少41%
       - 初次渲染快55%,更新渲染块133%
       - 内存减少54%
    2.源码的升级
       - 使用Proxy代替defineProperty
       - 重写虚拟DOM的实现和Tree-Shaking
    3.倚靠TypeScript
       - Vue3可以更好的支持TypeScript
    4.新的特性
       - Composition API(组合API)
       - setup配置
       - ref与reactive
       - watch与watchEffect
       - provide与inject
    5.新的内置组件
       - Fragment
       - Teleport
       - Suspense
    6.其他改变
       - 新的生命周期钩子
       - data 选项应始终被声明为一个函数
       - 移除keyCode支持作为v-on的修饰符

# 组合式API和配置项API
    vue2:配置项API
         new Vue({
             el:'#app',
             data:{}    
         })
    vue3:  组合式API
         let name='tom'
         let add=()=>{}
      

vue3创建项目

# 2.1 使用vue-cli
  - 创建的过程和vue2一样,只是在选在版本的时候选择vue3
  - 创建完成,使用pycharm打开,并且运行


# 2.2 vite 
  - 新建的前端构建工具,最大的优势就是速度快
      https://cn.vuejs.org/guide/scaling-up/tooling.html#project-scaffolding
  - 使用步骤:
      1.安装:  
                  npm init vue@latest
      2.按需选择vueRouter 
      3.cd到项目中执行
                  cnpm install 
      4.运行:
                  npm run dev
      """
      vueRouter:跟之前一样
      Pinia:用来替换Vuex的,新一代的状态管理器
      链式调用(抽时间)
      """
   - 速度快的原因:
      1.创建项目快:
             不用安装第三方依赖
      2.执行快的原因:
             热更新,按需编译  

setup函数

# vue2创建vue实例和vue3创建vue实例的区别
  - 1. vue2创建vue实例:
        new Vew()  ---->是Vue的实例,里面有$store,$refs...
        createApp(App)  ---->是个对象,对象里有东西,没有$store,$refs...,以后有用都是导入使用
  - 2. vue3创建vue实例:
        以后vue3 的<template>,不需要写一个标签了。
        以后都写在setup函数中,定义变量,定义函数,一定要return,在templage中才能使用  
失去了响应式

ref和reactive

# 有响应式
   - 定义变量,有响应式就用 ref包裹起来,
   - 修改变量,需要用 变量名.value 修改
    
# 配置项api和组合式api可以混写(不建议)
   - 在前在data中定义的变量
   - 在setup中定义的变量    
   - 总结:
        在setup中定义的变量和函数,在之前配置项api中可以直接使用this.变量,函数调用即可
        原来配置项中定义的变量,函数,在setup中无法使用
        
        
        
# 不同类型做响应式
    - ref通常用来包裹,数字,字符串类型,以后使用  xx.value
    - reactive用来包裹数组和对象类型    以后使用  直接用即可
    
# 总结  
    - ref定义的数据:操作数据需要.value,读取数据时模板中直接读取不需要.value。
    - reactive定义的数据:操作数据与读取数据:均不需要.value
# setup,ref和reactive 代码实操
<template>
  <div class="home">
    <h1>setup的使用</h1>
    <p>姓名:{{name}}</p>
    <p>年龄:{{age}}</p>
    <button @click="handleClick">点我看美女</button>
    <button @click="handleAdd">点击增加年龄</button>
    <button @click="handleName">点击名字加?</button>
    <button @click="handleName2">点击名字加?2</button>
    <br>
    {{userInfo.name}}
    {{userInfo.gender}}
    <br>
    <button @click="handleMessage">点击修改吴彦祖性别</button>
  </div>
</template>
<script>
import {ref,reactive} from 'vue'
export default {
  name: 'HomeView',
  methods:{
    handleName2(){
      this.name=this.name+'?'
      console.log(this.name)
    }
  },
  setup(){
    let name =ref('lqz')
    let age = ref(19)
    let handleClick =()=>{
      alert('猛男')
    }
    let handleAdd =()=>{
      age.value = age.value+1
      console.log(age) // 添加ref后打印出来直接是一个value对象
    }
    let handleName =()=>{
      name.value = name.value+'?'
      console.log(name) // 添加
    }
    // let userInfo = {
    //   name:'吴彦祖',
    //   gender:'male',
    // }
    // let userInfo =ref({
    //   name:'吴彦祖',
    //   gender:'male',
    // })
    let userInfo =reactive({
      name:'吴彦祖',
      gender:'male',
    })
    // let handleMessage =()=>{
    //   userInfo.value.gender = '未知'
    // }
    let handleMessage =()=>{
      userInfo.gender = '未知'
    }
    return {name,age,handleClick,handleAdd,handleName,userInfo,handleMessage}
  }
}
</script>

 

 

计算属性和监听属性

计算属性

# computed 的配置项中的写法,不建议用了
    computed:{
        fullName(){
          return this.firstName+this.lastName
        }
      },
    
    
 # vue3 新写法
    let person = reactive({
      firstName: '',
      lastName: '',
    })
   let fullName = computed(() => {
    return person.firstName + person.lastName
    })


# 计算属性取值和修改值
    let fullName = computed({
      get() {
        return person.firstName + person.lastName
      },
      set(value) {
        person.firstName = value.slice(0, 1)
        person.lastName = value.slice(1)
      },
    })

监听属性

# 组合式api写法,只要name发生变化,就会触发匿名函数执行
   let name = ref('lqz')
   watch(name, (newName, oldName) => {
      console.log('name变了')
      console.log('老的', oldName)
      console.log('新的', newName)
    })

# watchEffect 用法,只要age变化,就会执行,age不变化,就不会执行
    watchEffect(() => {
      console.log(age.value)
    })

 

生命周期

# vue3的变化,不推荐了
    -vue2       和    vue3比较
    beforeCreate===>beforeCreate
    created=======>created
    beforeMount ===>beforeMount
    mounted=======>mounted
    beforeUpdate===>beforeUpdate
    updated =======>updated
    beforeDestroy ==>beforeUnmount
    destroyed =====>unmounted
        
# 不推荐用这种写法了,配置项写法,统统写在setup中
    beforeCreate===>setup()
    created=======>setup()
    beforeMount ===>onBeforeMount
    mounted=======>onMounted
    beforeUpdate===>onBeforeUpdate
    updated =======>onUpdated
    beforeUnmount ==>onBeforeUnmount
    unmounted =====>onUnmounted
      
 # 以前写在created中的代码,现在直接写在setup开始即可
 let show = ref(false)
 axios.get().then(res=>{
      show.value=res.data.show
 })

toRefs

# 以后setup的返回值可以直接使用
  setup() {
    let data = reactive({
      name: 'lqz',
      age: 19,
      gender: '男'
    })
    return {...toRefs(data)}
  }
# 以后在模板中直接用  {{name}}

script setup的作用和lang=ts

<script setup>
import {ref} from 'vue'
let name = ref('lqz')
let handleClick = () => {
  alert('美女')
}
</script>

# 以后 这个script中的代码直接放到 setup函数中,不用return了

#lang=ts
里面代码使用ts写,而ts完全兼容js,继续写js代码没问题
# 公司内部项目,会写后台管理,往上有很多vue开源的后台管理的框架,咱们只需要在上面做二次开发
​
# django-vue-admin 前端---》D2Admin 
# 若依:vue前端  用来   vue-element-admin
# elamin前端   drf  写了基于rbac权限管理的框架
​
# https://gitee.com/liuqingzheng/vue_admin

 

vue后台管理模板

 

 

 

 

 

标签:vue,name,setup,value,let,vue3,ref,08
From: https://www.cnblogs.com/juzijunjun/p/17146024.html

相关文章

  • vue_day08 vue3基本使用了解
    目录今日内容详细一、vue3介绍二、vue3创建项目1.使用vue-cli2.vite三、setup函数1.scriptsetup的作用和lang=ts四、ref和reactive五、计算属性和监听属性1.计算属性2.......
  • CF908H
    非常厉害的题!看完题解学到了很多。Description传送门Solution不妨先考虑,\(G\)中不含A怎么做。由于图弱连通,因此边数下界为\(n-1\)。造一条链即可达到该下界,因此答......
  • 【Vue Router】019-动态路由 和 学习总结
    1.19动态路由1.19.1概述添加路由到你的路由上通常是通过​​routes​​​,但是在某些情况下,你可能想在应用程序已经运行的时候添加或删除路由。具有可扩展接口(如​​Vue......
  • 【Vue Router】017-扩展 RouterLink*
    1.17扩展RouterLink*1.17.1概述RouterLink组件提供了足够的​​props​​​来满足大多数基本应用程序的需求,但它并未尝试涵盖所有可能的用例,在某些高级情况下,你可能会......
  • 【Vue Router】018-等待导航结果*
    1.18等待导航结果*这个功能还是很有用的!1.18.1概述当使用​​router-link​​​组件时,VueRouter会自动调用​​router.push​​来触发一次导航。虽然大多数链接的预......
  • 【Vue Router】016-路由懒加载
    1.16路由懒加载这个是很有用的,之前使用import静态导入组件是一次性导入所有的组件,当用户打开网页的时候,会下载所有的组件,这样的话就会很耗时,影响用户体验!1.16.1概述当打......
  • 【Vue Router】015-滚动行为*
    1.15滚动行为*直接贴文档吧,使用时再进行详细探索,很难所有功能都亲自实现一遍!1.15.1概述使用前端路由,当切换到新路由时,想要页面滚到顶部,或者是保持原先的滚动位置,就像重新......
  • 【Vue Router】014-过渡动效*
    1.14过渡动效*1.14.1概述想要在你的路径组件上使用转场,并对导航进行动画处理,你需要使用​​v-slotAPI​​:<router-viewv-slot="{Component}"><transitionname="fa......
  • 【Vue Router】013-Vue Router 与组合 API
    1.13VueRouter与组合API1.13.1概述实际上,我们在上面的代码里面已经尽量使用组合API了,在这里进行一个总结。1.13.2在setup()函数中访问Router和当前路由因为我们......
  • 【Vue Router】012-数据获取
    1.12数据获取1.12.1概述当路由被激活时,我们往往需要从服务器获取数据,以便能够正确地选渲染组件。数据获取的方式有两种,具体使用哪一种取决于应用场景和用户体验。导航后获......