快速上手
全局安装 vue-cli(3.0+)脚手架
1 | npm install -g @vue/cli |
初始化项目
1 | vue create <projectname> |
目录结构
起步
1 | import { createApp } from "vue"; |
响应式系统工具集
unref | unref 是 val = isRef(val) ? val.value : val 的语法糖 | unref(ref(0))===unref(0)===0 返回 number |
---|---|---|
toRef | toRef 可以用来为一个 reactive 对象的属性【某个属性区别 toRefs 每一个属性】创建一个 ref。这个 ref 可以被传递并且能够保持响应性 | const state = reactive({ foo: 1 }) |
//reactive 获取单个属性转为 ref【fooRef 只是一个代理】
const fooRef = toRef(state, ‘foo’)
fooRef.value++
console.log(state.foo) //2 |
| toRefs | 把一个响应式对象转换成普通对象,该普通对象的每个 property 都是一个 ref ,和响应式对象 property 一一对应 | const state = reactive({ foo: 1})
const stateAsRefs = toRefs(state)
_stateAsRefs 的类型如下: _
foo: Ref
| isRef | 检查一个值是否为一个 ref 对象 |
|
| ref | 用于封装普通类型 | const a=ref(10);
return {a}; |
数据监听
ref 只可以监听简单数据,reactive 可以监听所有数据、
写法一:
1 | const a = ref(1); |
写法二:
1 | const reactive = ({ |
在这里不评价哪种合适,也没有什么准确的答案,两者的主要区别在于:一,我们使用了 2 个变量来存储值;而风格二则当作对象的属性存储。这两种风格的代码工作的都没问题,关键在于个人或团队的偏好:使用单独的变量还是使用对象封装,我觉得 ref 更偏向于第一类人,而 reactive 更偏向于第二类吧
特性
- ref 只可以监听简单数据
- reactive 可以监听所有数据
ref 这种写法简单,但也有弊端,经过尝试,我发现他只能监听一些如数字、字符串、布尔之类的简单数据而如果需要监听如上面代码一样的 jsonArray 我们在 vue2 种都会使用$set 来进行变更,到了 vue3 我们终于可以愉快的使用 reactive 来实现了。
使用方式
- ref 修改数据需要使用这样 count.value=xxx 的形式,而 reactive 只需要 state.reactiveField=值这样来使用
- 第二点体现在 template 中引用时候为 reactiveField,不需要 state,也就是说我 reactive 对象里面字段是应该直接使用的
- 体现在 reactive 在 return 时候需要 toRefs 来转换成响应式对象
生命周期
2.x 生命周期列表如下:
1 | beforeCreate -> setup() |
3.x 生命周期变化
errorCaptured -> onErrorCaptured
onRenderTracked
onRenderTriggered
- beforeDestroy\destroyed 被替换为了 onBeforeUnmount、onUnmounted
- 去掉了 beforeCreate、created 直接使用 setup
- 新增了 onRenderTracked、onRenderTriggered(两个钩子都是到 DebuggerEvent 类似于 onTrack 和 onTrigger 观察者的选项)
vue2.0 | vue3.0 |
---|---|
beforeCreate | setup |
created | setup |
beforeMount | onBeforeMount |
mounted | onMounted |
beforeUpdate | onBeforeUpdate |
updated | onUpdated |
beforeDestroy | onBeforeUnmount |
destroyed | onUnmounted |
errorCaptured | onErrorCaptured |
新增方法
| v-is | 本节只影响在页面的 HTML 中直接编写 Vue 模板的情况
警告 v-is 功能 像一个动态 2.x :is
绑定 所以要根据注册的名称渲染组件,它的值应该是一个 JavaScript 字符串 |
<trv-is=”blog-post-row”>
<trv-is=”‘blog-post-row’”> |
---|
计算属性
1 | <template> |
监听数据
1 | <template> |
事件对象:
- key 那边变量发生了变化
- newValue 更新后变量的值
- oldValue 更新前变量的值
- target 目前页面中的响应变量和函数
1 | <script> |
路由
获取路由
1 | <script> |
404 配置
按照 vue2.x 配置 404 页面会有下面报错,我们可以:
caught Error: Catch all routes (“*“) must now be defined using a param with a custom regexp.
1 | { |
状态管理
依然可以使用 vuex 官方状态管理容器管理共享状态,下面是使用方式:
1 | <script> |
- Post link: https://blog.gaocaipeng.com/2019/10/02/ug0hio/
- Copyright Notice: All articles in this blog are licensed under unless otherwise stated.