Vue3--简介+创建项目+setup函数+ref+reactive+Vue3计算属性+Vue3监听属性+生命周期+hooks+toRefs+后台管理+补充(模板补充+Vue3组件导入+bom操作补充)

11.2内容整理和概述

今日内容概要

内容目录

  • Vue3升级简介
  • 创建Vue3项目
  • setup函数+ref+reactive
  • Vue3计算属性
  • Vue3监听属性
  • Vue3的生命周期
  • hooks
  • toRefs
  • 后台管理模板
  • 战略补充

Vue3升级简介

性能提升:
	1.打包大小减少41%
	2.初次渲染快55%, 更新渲染快133%
	3.内存减少54%

源码升级:
	1.使用Proxy代替defineProperty实现响应式
	2.重写虚拟DOM的实现和Tree-Shaking	# Tree-Shaking:优化代码

拥抱TypeScript:
	1.Vue3可以更好的支持TypeScript

新特性:
	1.Composition API(组合API):
        1.setup配置
        2.ref与reactive
        3.watch与watchEffect
        4.provide与inject
	2.新内置组件:
        1.Fragment
        2.Teleport
        3.Suspense
	3.其他:
        1.新的生命周期钩子
        2.data选项应始终被声明为一个函数
        3.移除keyCode支持作为v-on的修饰符

# 建议看Vue3文档,文档记得最全

创建Vue3项目

方式一:
	脚手架:vue-cli
	流程:和Vue2流程一样

方式二:
	脚手架:vite	# vue3项目推荐
	流程:
		方式一:
            1.无需安装脚手架,直接创建项目:npm init vue@latest
            2.输入y-->准备好了
            3.输入项目名
            4.选择是否增加ts的支持
            5.选择是否增加Vue Router(路由)的支持	# 建议增加
            6.选择是否增加Pinia的支持	# Pinia:类似vuex,功能更强
            7.选择是否增加vitest支持	# 不知道啥玩意,就填no
            8.选择是否增加end-to-end支持	# 不知道啥玩意,就填no
            9.选择是否增加ESLint的支持	# 不知道啥玩意,就填no
            10.项目创建完成
            11.安装依赖:npm install
12.运行项目:npm install
            12.运行项目:npm run dev		
		方式二:	# 比较老
			1.创建项目:npm init vite-app <项目名>
			2.项目创建完成
			3.安装依赖:pm install
			4.运行:npm run dev
			补充:当前方法创建Vue项目版本较低

setup函数+ref+reactive

setup:
	定义: 是vue新增的setup配置项函数,以后所有的变量和函数在此方法中定义		# 替代data,methods
    特点:
        1.可以定义变量
        2.可以定义函数
        3.在模板中使用的函数或变量,必须return出去
        4.setup没有this这个变量
	参数:
		本质:上下文,替代this的功能,用于拿取数据
		例子:setup(context) {context.name}

    代码案例:
        <script>
            export default {
              name: 'App',

              setup() {  
                let age = 19
                let name = 'lqz'
                function handleClick() {alert('美女~~~')}
                let handleAdd = () => {
                  console.log('我要开始加了')
                  age=age+1
                  console.log(age)
                }
                return {
                  age, name, handleClick, handleAdd
                }
              }

            }
        </script>
        # 不确定能不能这么写
        <script setup>
            let age = 19
            let name = 'lqz'
            function handleClick() {alert('美女~~~')}
            let handleAdd = () => {
                console.log('我要开始加了')
                age=age+1
                console.log(age)
        </script>

ref+reactive:
	使用背景:只用setup函数渲染数据只能刷新数据,不能实现双向绑定
	解决方案:使用ref+reactive
	使用范围:
		ref:基本数据对象		# 建议如此使用,ref也支持数组和对象,但是麻烦
		reactive:数组+对象

	ref使用步骤:
		1.导入:import {ref, reactive} from 'vue'		# setup函数存在的组件界面中
		2.将需要响应的基本数据类型的数据传入ref函数中	# 例子:let age = ref(19)
		3.调用了ref函数的数据变量在底层被封装成了RefImpl对象,数据被放在了对象的data属性中
		4.模板区调用数据可以直接使用变量或者变量.data
	ref代码案例:
        export default {
          name: 'App',
          setup() {
            let age = ref(19) 
            let name = ref('lqz')
            let handleAdd = () => {
              age.value = age.value + 1
            }
            function handleChangeName(){
              name.value=name.value+'?'
              console.log(name)
            }
            return {
              age, name, handleClick, handleAdd,handleChangeName
            }
          }
        }

	reactive使用步骤:
		1.导入:import {ref, reactive} from 'vue'		# 当前位置:setup函数存在的组件界面中
		2.将需要响应的对象或数组的数据传入reactive函数中	# 例子:let person = reactive({'name':'lwy','age':18})
		3.被reactive封装后的对象使用方法不变,直接对象.属性,不需要像ref对象使用value属性	# 例子:person.age++

Vue3计算属性

Vue2的计算属性写法:
	omputed: {
        fullName() {
            return firstName.value + lastName.value
        }
	
Vue3的计算属性写法:
	let fullName = computed(() => {
		return firstName.value + lastName.value
	})

老刘案例:
     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
      }

Vue3监听属性

Vue2的监听属性写法:
	watch: {
        type(val) {
            console.log('修改后变成了,', val)
            console.log('向后端加载数据了')
        }
    }
	
Vue3的监听属性写法:
	watch(name, (newValue, old) => {	# old:name修改之前的数据;newValue:name修改之后的数据
      console.log('name变了')
		console.log(old)
		console.log(newValue)
    })

新增监听属性:		
	方法:watchEffect
	功能:只要函数中使用的变量发生变化,它就会触发		# 可以监听多个变量和方法
	案例:
        watchEffect(() => {
              let a = name.value + '?'
              console.log('watchEffect配置的回调执行了')
            })

Vue3的生命周期

Vue3生命周期钩子函数:
	1.beforeCreate:创建Vue实例之前调用		# data,el属性都不存在
	2.created:创建Vue实例成功后调用		# 可以在此处发送异步请求后端数据,说明data属性已经存在,el属性不存在
	3.beforeMount:渲染DOM之前调用		# data属性存在,el属性不存在
	4.mounted:渲染DOM之后调用
	5.beforeUpdate:重新渲染之前调用
	6.updated:重新渲染完成之后调用
	7.beforeUnmount:销毁之前调用		# Vue2:beforeDestroy
	8.unmounted:销毁之后调用,用于清理资源的工作	# Vue2:destroyed

Vue3 Composition API 形式的生命周期钩子:		# 需要导入
    beforeCreate===>直接在setup()编写
    created=======>直接在setup()编写
    beforeMount ===>onBeforeMount
    mounted=======>onMounted
    beforeUpdate===>onBeforeUpdate
    updated =======>onUpdated
    beforeUnmount ==>onBeforeUnmount
    unmounted =====>onUnmounted

hooks

本质:一个函数,把setup函数中使用的Composition API进行了封装	# 类似vue2中的mixin组件
功能:复用代码, 让setup中的逻辑更清楚易懂

使用步骤:
	1.创建新的文件夹和js文件
	2.在js文件中编写复用的变量和函数,并导出
	3.在使用的组件中导入并命名		# import usePoint from '../hook/uesPoint.js'
	4.调用命名的函数并用变量接收		# let p = usePoint()

toRefs

功能:return返回对象数据时,可以实现解压赋值

代码案例:
    setup() {
        let data = reactive({
          name: 'lqz',
          age: 19,
          isShow: true
        })

        function handleShow() {
          console.log('ssdaf')
          data.isShow = !data.isShow
          data.age++
        }

        return {
          ...toRefs(data),	
		# 上一句 = name:data.name,age:data.name,isShow:data.name
          handleShow
          // data
        }

      }

后台管理模板

vue-elementui-admin:	# vue2写的
	1.不建议二次开发
	2.二次开发建议vue-admin-template
		修改:"dev": "set NODE_OPTIONS=--openssl-legacy-provider & vue-cli-service serve",		# 当前位置:package.json

Java:若依,带权限控制的后台管理模块		# 也是基于vue-elementui-admin的
python:django-vue-admin   
go:gin-vue-admin

战略补充(模板补充+Vue3组件导入+bom操作补充)

模板补充:
	1.Vue3模板的html语言不需要全部都放在一个div标签中了
	2.Vue2模板的html语言必须全部都放在一个div标签中

Vue3组件导入:需要在路径后加入.vue,不然报错	# 例子:import hello from "./components/hello.vue"

bom操作:
	 window.addEventListener:
		功能:增加监听事件
		运用:window.addEventListener('click', getPoint)	# 鼠标点击,触发getPoint函数
	 window.removeEventListener:
		功能:移除监听事件
		运用:window.addEventListener('click', getPoint)	# 移除当前监听事件
posted @ 2023-05-25 21:46  维生素Z  阅读(15)  评论(0)    收藏  举报