第五周(10.14-10.20)学习笔记 24软工陈奕君

学习收获:正在学习Vue3,目前学到了路由

学习笔记:

vue3:

ref------->可以定义:基本类型数据和对象类型的响应式数据

reactive-->只能定义:对象类型的响应式数据

ref创建的变量必须使用.value

computed:

作用:根据已有数据计算出新数据(和Vue2中的computed作用一致)。

实现同样的功能,方法function没有缓存,模板调用几次,函数就执行几次;计算属性computed有缓存,模板调用多次,实际上只执行一次。

计算属性实际上是一个ref响应式对象,因此赋值时候需要加上.value

watch监视:

情况一:监视ref定义的【基本类型】数据:直接写数据名即可,监视的是其value值的改变。

情况二:监视ref定义的【对象类型】数据:直接写数据名,监视的是对象的【地址值】,若想监视对象内部的数据,要手动开启深度监视。

注意:

若修改的是ref定义的对象中的属性,newValue 和 oldValue 都是新值,因为它们是同一个对象。

若修改整个ref定义的对象,newValue 是新值, oldValue 是旧值,因为不是同一个对象了。

情况三:监视reactive定义的【对象类型】数据,且默认开启了深度监视,且深层监视无法关闭。

无法监视地址值,因为对象地址值没有改变,本质上assign在原对象上进行的是赋值。

newValue和oldValue值相同,都是新值,还是因为对象地址值没有改变,本质上assign在原对象上进行的是赋值。

情况四:监视ref或reactive定义的【对象类型】数据中的某个属性,注意点如下:

若该属性值不是【对象类型】即【基本类型】,需要写成函数形式,此时oldValue是旧值,newValue是新值。

若该属性值是依然是【对象类型】,可直接编,也可写成函数,建议写成函数。

结论:监视的要是对象里的属性,那么最好写函数式。

注意点:若是对象监视的是地址值,需要关注对象内部,需要手动开启深度监视。

监视多个数据需要加[]包裹,并且都用函数形式

watchEffect:

立即运行一个函数,同时响应式地追踪其依赖,并在依赖更改时重新执行该函数。

watch对比watchEffect:

1、都能监听响应式数据的变化,不同的是监听数据变化的方式不同

2、watch:要明确指出监视的数据

3、watchEffect:不用明确指出监视的数据(函数中用到哪些属性,那就监视哪些属性)。

标签的ref属性:

作用:用于注册模板引用。

1.用在普通DOM标签上,获取的是DOM节点。

2.用在组件标签上,获取的是组件实例对象。

props的使用:

// 第一种写法:仅接收

// const props = defineProps(['list'])

// 第二种写法:接收 + 限制类型

// defineProps<{list:Persons}>()

// 第三种写法:接收 + 限制类型 + 指定默认值 + 限制必要性

let props = withDefaults(defineProps<{list?:Persons}>(),{

list:()=>[{id:'asdasg01',name:'小猪佩奇',age:18}]

})

Props 向下,事件向上:

数据通过 props 向下流动(父 → 子)

交互通过事件 向上传递(子 → 父)

【生命周期】

概念:Vue组件实例在创建时要经历一系列的初始化步骤,在此过程中Vue会在合适的时机,调用特定的函数,从而让开发者有机会在特定阶段运行自己的代码,这些特定的函数统称为:生命周期钩子

规律:生命周期整体分为四个阶段,分别是:创建、挂载、更新、销毁,每个阶段都有两个钩子,一前一后。

Vue2的生命周期

创建阶段:beforeCreate、created

挂载阶段:beforeMount、mounted

更新阶段:beforeUpdate、updated

销毁阶段:beforeDestroy、destroyed

Vue3的生命周期

创建阶段:setup

挂载阶段:onBeforeMount、onMounted

更新阶段:onBeforeUpdate、onUpdated

卸载阶段:onBeforeUnmount、onUnmounted

常用的钩子:onMounted(挂载完毕)、onUpdated(更新完毕)、onBeforeUnmount(卸载之前)

自定义hook:

什么是hook?—— 本质是一个函数,把setup函数中使用的Composition API进行了封装,类似于vue2.x中的mixin。

自定义hook的优势:复用代码, 让setup中的逻辑更清楚易懂。

路由:

1. 什么是路由?

路由就是根据不同的 URL 地址,展示不同的内容或页面。

2. 路由的基本使用

安装和配置:

// router/index.js

import { createRouter, createWebHistory } from 'vue-router'

import Home from '@/components/Home.vue'

import News from '@/components/News.vue'

import About from '@/components/About.vue'

const router = createRouter({

history: createWebHistory(),

routes: [

{ path: '/', redirect: '/home' }, // 重定向

{ path: '/home', component: Home },

{ path: '/news', component: News },

{ path: '/about', component: About }

]

})

export default router//一定要记得暴露路由器

在 main.js 中使用:

import { createApp } from 'vue'

import App from './App.vue'

import router from './router'

const app = createApp(App)

app.use(router) // 使用路由器

app.mount('#app')

3. 核心组件

RouterLink - 导航链接

<template>

<RouterLink to="/home" active-class="active">首页</RouterLink>

<RouterLink to="/news" active-class="active">新闻</RouterLink>

</template>

to:指定跳转的路由路径

active-class:激活状态时的 CSS 类名

RouterView-视图容器:用于显示当前路由对应的组件内容

路由器工作模式:

1.history模式

优点:URL更加美观,不带有#,更接近传统的网站URL。

缺点:后期项目上线,需要服务端配合处理路径问题,否则刷新会有404错误。

各版本:

vue2——mode:'history'

vue3——history:createWebHistory()

React——BrowserRouter

2.hash模式

优点:兼容性更好,因为不需要服务器端处理路径。

缺点:URL带有#不太美观,且在SEO优化方面相对较差。

to的两种写法:

<!-- 第一种:to的字符串写法 -->

<router-link active-class="active" to="/home">主页</router-link>

<!-- 第二种:to的对象写法 -->

<router-link active-class="active" :to="{path:'/home'}">Home</router-link>


第五周(10.14-10.20)学习笔记 24软工陈奕君
http://localhost:8090//archives/di-wu-zhou-10.14-10.20-xue-xi-bi-ji-24ruan-gong-chen-yi-jun
作者
陈奕君
发布于
2025年10月20日
许可协议