计算属性:
数据来源:
接收的props,
data组件自己的状态
vuex的store
全局的router
抽出的context
组件输入
数去去向:
view
派生的状态data
子组件的props
组件间通信:
props down emit up
子emit 父on
父brocast 子on
.sync 子改变props 同步到 父
event bus
eventemmiter
vuex状态管理
响应原理:
Object.defineProperty 把组件的data函数返回的数据进行 getter/setter 拦截,
对数据进行依赖收集,交给实例的 watcher 来监听,
当数据改变 setter 会调用,通知 watcher 重新计算。
vue 不能检测对象属性的添加和删除,需要挂到data上转化才可以。
$set可以追加到 data 状态上。
vue 异步更新 dom,数据变化后,会被推入一个队列中,
推入前会做去重,然后插入到下一个 eventloop 的前端。
等待浏览器执行。内部使用的是 promise ,所以是job类型,会加入到下个事件循环的前面。
采用 setTimeout(fn, 0)兼容。会被插入到task的后面,即队列的后面。
这时候$nextTick(cb), 可以在dom更新后调用cb
watch:
对某个对象进行监听, 对比前后数据变化
数据来源:data computed
生命周期:
beforeCreate
进行组件初始化,数据观测和 event/watcher 事件配置之前
created
实例完成创建 数据观测和 event/watcher 事件配置完成,
$el 还不可见,没挂载,可以进行接口请求
beforemount
render 函数调用
mounted
$el 创建, dom挂载,可以调用dom,通常这时候开始接口请求
beforeUpdate
数据更新时调用,但是vdom还没 rerender,可以更改state
updated
vdom rerender 完成, 可以操作dom,不应该更新state,最好computed或者watch
actived
keep-alive 组件激活
deactivated
keep-alive 组件停用
breforeDestroyed
销毁前调用, 实例仍可用
destroyed
组件销毁,绑定解除,子实例也销毁
vuex:
组件dispatch action type 和 payload
action接收type 执行异步接口, commit回掉结果
mutation同步处理state
state需要初始化默认值
getters直接获取state返回
store合并所有的module
组件通过$store获取所有数据
slot 内容分发,混合父组件的内容与子组件自己的模板
name具名,没name的是default
作用域槽,能在父中读取子的props
动态组件
component元素,is来绑定组件,组件由变量控制,可以灵活切换组件
keep-alive:
组件浏览内存,保留它的状态或避免重新渲染
自定义指令
vue.directive(‘demo’, {
// 执行一次 初始化
bind() {
el //绑定的元素
binding{
name //指令名
value //绑定值
oldvalue //前一个绑定的值
expression 绑定值的表达式
arg // 参数
modifiers //修饰符
}
}
inserted //插入父时执行
update // 元素所在的模板更新时调用
componentUpdated //模板完成一次更新周期时调用
unbind //执行一次 指令与元素解绑
})
混合:mixin
生命周期同名,推入一个数组全部执行,mixin的生命周期先执行,然后到组件的
methods、directive等同名,只执行主件的函数
组件定义方式
functional
component