一、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开发实践笔记相关推荐

  1. vue3开发实践总结

    背景 前段时间需要排Q3的前端技术项,刚好我一直想做vue3项目很久了,就与领导商议了一下,把一个线上小项目改造成vue3版本的. 这是个PC端项目,作为微前端被内嵌至别的应用之中,项目不大,只有三个 ...

  2. seajs的模块化开发--实践笔记

    2017-04-02 SeaJS是一个遵循CMD规范的JavaScript模块加载框架,可以实现JavaScript的模块化开发及加载机制.有效的解决复杂项目中命名冲突.依赖.性能等问题. SeaJS ...

  3. Hibernate开发实践笔记--对象在set属性时更新了数据库问题

    之前一直没发现这个问题,后来是因为我的导航栏数据库中数据发生变动后,产生菜单的时候又update了一遍数据库中的数据,使得部分数据值为空了,当时觉得很奇怪,后来仔细看了下log4j打印的日志发现其中有 ...

  4. (JS设计模式与开发实践笔记)第二章

    第二章:this.call和apply this JS的this总是指向一个对象,而具体指向哪个对象是在运行时基于函数的执行环境动态绑定的,而非函数被声明时的环境. this指向的四种情况 作为对象的 ...

  5. 《疯狂前端开发讲义jQuery+Angular+Bootstrap前端开发实践》学习笔记

    <疯狂前端开发讲义jQuery+Angular+Bootstrap前端开发实践>学习笔记 二〇一九年二月十三日星期三2时28分54秒 前提:本书适合有初步HTML.CSS.JavaScri ...

  6. 【阅读笔记】精益开发实践用看板管理大型项目

    [阅读笔记]精益开发实践用看板管理大型项目 参考 精益开发实践用看板管理大型项目 文章目录 [阅读笔记]精益开发实践用看板管理大型项目 一.我们如何工作(案例研究) 1.项目背景 2.组织团队 3.每 ...

  7. MOOC微信小程序开发从入门到实践~笔记

    MOOC微信小程序开发从入门到实践~笔记 1.图标网站[icon]www.iconfont.cn 2.新建项目是必须需要AppID 3.app.js是页面逻辑文件 app.json是页面全局配置文件( ...

  8. javascript设计模式(javascript设计模式与开发实践读书笔记)

    javascript设计模式(javascript设计模式与开发实践读书笔记) 单例模式 策略模式 代理模式 迭代器模式 发布-订阅模式 命令模式 组合模式 模板方法模式 享元模式 职责链模式 中介者 ...

  9. Flutter开发之《网易新闻客户端Flutter混合开发实践》笔记(52)

    摘自:网易新闻客户端Flutter混合开发实践 引言 网易新闻项目本身很庞大,业务繁多,全部改为Flutter实现肯定是不现实的,在使用Flutter的前期阶段,我们挑选了相对独立的几个模块,在现有工 ...

最新文章

  1. QIIME 2用户文档. 17序列双端合并read-joining(2018.11)
  2. 计算机视觉Computer Vision网址导航
  3. CVPR 2017 ECO:《ECO: Efficient Convolution Operators for Tracking》论文笔记
  4. 六、PHP框架Laravel学习笔记——响应设置和重定向
  5. 自然语言处理——语言模型
  6. 计算机2级c 语言题库,计算机2级C语言题库.doc
  7. 微软拆分 VS Code 中 Python 扩展,部分功能可独立下载
  8. Endless Spin
  9. linux下调整交换分区的大小
  10. 小 C 的数学(math)详解
  11. 虚拟仿真实训教学管理及资源共享平台虚拟实训开发对接文档
  12. Android 谷歌发布support-v4、v7、v8、v16、v17包
  13. C# 导出 EXecl ,导出word,word转PDF
  14. NTU RGB-D数据集申请
  15. 华南理工计算机就业棒棒,为梦想、为公益,华南理工大学学子为爱发声
  16. 网站中CSS是实现什么功能的,什么是CSS,其主要作用是什么
  17. 性能优化,进无止境---CPU篇
  18. 国内和国外DNS服务器地址 全国各地电信DNS服务器地址
  19. Vue 和 React 的diff有什么不同
  20. 【论文阅读】Structured Pruning Learns Compact and Accurate Models

热门文章

  1. zookeeper windows 下安装
  2. Html5响应式设计与实现广场
  3. WP8.1学习系列(第九章)——透视Pivot开发指南
  4. SQL View 的使用语法与原则
  5. python web应用_为您的应用选择最佳的Python Web爬网库
  6. 维护旧项目_为什么您的旧版软件难以维护-以及如何处理。
  7. git 代码推送流程_Git 101:一个让您开始推送代码的Git工作流程
  8. 您需要了解的WordPress漏洞以及如何修复它们
  9. jsp 构建单页应用_如何使用服务器端Blazor构建单页应用程序
  10. 面试官面试前端_如何面试面试官