vue3开发实践笔记
一、setup
生命周期
1、执行时机:会在beforeCreate之前执行,内部无法访问this
2、setup 包含的生命周期
onBeforeMount
——挂载开始前调用
onMount
——挂载后调用
onBeforeUpdate
——当响应数据改变,且重新渲染前调用
onUpdated
——重新渲染后调用
onBeforeUnmount
——Vue实例销毁前调用
onUnmounted
——实例销毁后调用
onActivated
——当keep-alive组件被激活时调用
onDeactivated
——当keep-alive组件取消激活时调用
onErrorCaptured
——从子组件中捕获错误时调用
export default { name: "hello", setup(msg) { console.log(msg); return { name:"Mr liu" }; }, };
}
二、数据绑定 / 响应式数据
在vue3中setup默认返回的普通数据不是响应的,如果希望数据是响应式的,有4种方式
1、ref
ref
一般用于简单类型数据。ref主要是用于定义基本数据类型的数据并保证响应式能力,也可以用于对象或数据
使用ref()
函数时,通常要注意两点:
1)在setup
中修改值和获取值的时候,需要.value
2)在模板中使用ref
申明的响应式数据,可以省略.value,模板使用{{变量}}取值
<template><div>{{ ebooks }}</div>
</template><script>
import { ref } from 'vue';
export default {name: 'App',setup(){const ebooks = ref();ebooks.value = 1;return{ebooks}}
}
</script>
2、reactive
reactive
是一个函数,可以用于定义一个复杂数据类型
// 定义数组 let list:any = reactive([])
import { reactive, toRef } from 'vue';
setup(){const ebooks1=reactive({books:[]})ebooks1.books= data.list;return{ebooks1: ebooks,ebooks2:toRef(ebooks1,"books")}
}
3、toRef
当我们在模板中渲染数据时,不希望由前缀的时候可以使用组合-toRef()
toRef()
是函数,转换响应式对象中某个属性为单独响应式数据,并且值是关联的
<template><div>{{ ebooks }}{{ ebooks2 }} // books列表</div>
</template><script>
import { reactive, toRef } from 'vue';
export default {name: 'App',setup(){const ebooks1=reactive({books:[]})ebooks1.books= data.list;return{ebooks1: ebooks,ebooks2: toRef(ebooks1,"books")}}
}
4、toRefs
toRefs
函数可以定义转换响应式中所有属性为 响应式数据,通常用于结构reactive
定义的对象,转换响应式对象中所有属性(也可以是一部分)为单独响应式数据,对象成为普通对象,并且值是关联的
<template><div>{{ msg }}</div><div>{{ info }}</div>
</template><script>
import { reactive, toRefs } from 'vue'
export default {name: 'App',setup() {const obj = reactive({msg: 'hello',info: 'hi'})const { msg, info } = toRefs(obj)const hClick = () => {msg.value = 'nihao'info.vaule = 'hihi'}return { msg, info, hClick }}
}
</script>
对比:
- ref 和 reactive定义普通类型响应式数据,显然使用reactive比较麻烦,
- ref比较麻烦的是,使用变量的话,不管是获取还是使用的话都需要加上.value;
注意:
- 项目实际开发中必须统一,不能既使用
reactive
又使用ref
三、vue3 路由跳转
1、useRouter
import { useRouter } from ‘vue-router’
setup(){
const router = useRouter()
router.push(’/corporateTransfer’)
}
2、传参:
// 字符串
router.push(‘home’)
// 对象
router.push({ path: ‘home’ })
// 命名的路由
router.push({ name: ‘user’, params: { userId: ‘123’ }})
// 带查询参数,变成 /register?userId=123
const userId = ‘123’
router.push({ name: ‘user’, params: { userId }}) // -> /user/123
router.push({ path: /user/${userId}
}) // -> /user/123
// 这里的 params 不生效
router.push({ path: ‘/user’, params: { userId }}) // -> /user
————————————————
//query
let userId=route.query.userId;
//params
let userId=route.params.userId;
注意:
- 如果提供了 path,params 会被忽略,但query 没有这种情况,此时需要提供路由的 name 或手写完整的带有参数的 path
- 上述规则同样适用于 router-link 组件的 to 属性
- 如果目的地和当前路由相同,只有参数发生了改变 (比如从一个用户资料到另一个 /users/1 -> /users/2),你需要使用 beforeRouteUpdate 来响应这个变化
vue3开发实践笔记相关推荐
- vue3开发实践总结
背景 前段时间需要排Q3的前端技术项,刚好我一直想做vue3项目很久了,就与领导商议了一下,把一个线上小项目改造成vue3版本的. 这是个PC端项目,作为微前端被内嵌至别的应用之中,项目不大,只有三个 ...
- seajs的模块化开发--实践笔记
2017-04-02 SeaJS是一个遵循CMD规范的JavaScript模块加载框架,可以实现JavaScript的模块化开发及加载机制.有效的解决复杂项目中命名冲突.依赖.性能等问题. SeaJS ...
- Hibernate开发实践笔记--对象在set属性时更新了数据库问题
之前一直没发现这个问题,后来是因为我的导航栏数据库中数据发生变动后,产生菜单的时候又update了一遍数据库中的数据,使得部分数据值为空了,当时觉得很奇怪,后来仔细看了下log4j打印的日志发现其中有 ...
- (JS设计模式与开发实践笔记)第二章
第二章:this.call和apply this JS的this总是指向一个对象,而具体指向哪个对象是在运行时基于函数的执行环境动态绑定的,而非函数被声明时的环境. this指向的四种情况 作为对象的 ...
- 《疯狂前端开发讲义jQuery+Angular+Bootstrap前端开发实践》学习笔记
<疯狂前端开发讲义jQuery+Angular+Bootstrap前端开发实践>学习笔记 二〇一九年二月十三日星期三2时28分54秒 前提:本书适合有初步HTML.CSS.JavaScri ...
- 【阅读笔记】精益开发实践用看板管理大型项目
[阅读笔记]精益开发实践用看板管理大型项目 参考 精益开发实践用看板管理大型项目 文章目录 [阅读笔记]精益开发实践用看板管理大型项目 一.我们如何工作(案例研究) 1.项目背景 2.组织团队 3.每 ...
- MOOC微信小程序开发从入门到实践~笔记
MOOC微信小程序开发从入门到实践~笔记 1.图标网站[icon]www.iconfont.cn 2.新建项目是必须需要AppID 3.app.js是页面逻辑文件 app.json是页面全局配置文件( ...
- javascript设计模式(javascript设计模式与开发实践读书笔记)
javascript设计模式(javascript设计模式与开发实践读书笔记) 单例模式 策略模式 代理模式 迭代器模式 发布-订阅模式 命令模式 组合模式 模板方法模式 享元模式 职责链模式 中介者 ...
- Flutter开发之《网易新闻客户端Flutter混合开发实践》笔记(52)
摘自:网易新闻客户端Flutter混合开发实践 引言 网易新闻项目本身很庞大,业务繁多,全部改为Flutter实现肯定是不现实的,在使用Flutter的前期阶段,我们挑选了相对独立的几个模块,在现有工 ...
最新文章
- QIIME 2用户文档. 17序列双端合并read-joining(2018.11)
- 计算机视觉Computer Vision网址导航
- CVPR 2017 ECO:《ECO: Efficient Convolution Operators for Tracking》论文笔记
- 六、PHP框架Laravel学习笔记——响应设置和重定向
- 自然语言处理——语言模型
- 计算机2级c 语言题库,计算机2级C语言题库.doc
- 微软拆分 VS Code 中 Python 扩展,部分功能可独立下载
- Endless Spin
- linux下调整交换分区的大小
- 小 C 的数学(math)详解
- 虚拟仿真实训教学管理及资源共享平台虚拟实训开发对接文档
- Android 谷歌发布support-v4、v7、v8、v16、v17包
- C# 导出 EXecl ,导出word,word转PDF
- NTU RGB-D数据集申请
- 华南理工计算机就业棒棒,为梦想、为公益,华南理工大学学子为爱发声
- 网站中CSS是实现什么功能的,什么是CSS,其主要作用是什么
- 性能优化,进无止境---CPU篇
- 国内和国外DNS服务器地址 全国各地电信DNS服务器地址
- Vue 和 React 的diff有什么不同
- 【论文阅读】Structured Pruning Learns Compact and Accurate Models
热门文章
- zookeeper windows 下安装
- Html5响应式设计与实现广场
- WP8.1学习系列(第九章)——透视Pivot开发指南
- SQL View 的使用语法与原则
- python web应用_为您的应用选择最佳的Python Web爬网库
- 维护旧项目_为什么您的旧版软件难以维护-以及如何处理。
- git 代码推送流程_Git 101:一个让您开始推送代码的Git工作流程
- 您需要了解的WordPress漏洞以及如何修复它们
- jsp 构建单页应用_如何使用服务器端Blazor构建单页应用程序
- 面试官面试前端_如何面试面试官