原本今天想直接向源代码进军的,或者总结一下如何经过单元测试代码提升看源码的效率。可是想一想仍是把API作个小结吧。稳扎稳打。html
const {
createApp,
reactive, // 建立响应式数据对象
ref, // 建立一个响应式的数据对象
toRefs, // 将响应式数据对象转换为单一响应式对象
isRef, // 判断某值是不是引用类型
computed, // 建立计算属性
watch, // 建立watch监听
// 生命周期钩子
onMounted,
onUpdated,
onUnmounted,
} = Vue
复制代码
setup函数会在 beforeCreate以后 created以前执行vue
setup(props,context){
console.log('setup....',)
console.log('props',props) // 组件参数
console.log('context',context) // 上下文对象
}
复制代码
好的其实你们能够和本身原来的React偶不Vue2代码对号入座。java
reactive() 函数接受一个普通对象 返回一个响应式数据对象react
const state = reactive({
count: 0,
plusOne: computed(() => state.count + 1)
})
复制代码
- ref 将给定的值(确切的说是基本数据类型 ini 或 string)建立一个响应式的数据对象
- isRef 其实就是判断一下是否是ref生成的响应式数据对象
首先这里面有一个重要的概念叫包装对象(value wrapper),谈到wrapper从java那边转过来的小朋友确定记得java里面的wrapclass其实概念差很少啦。咱们知道基本数据类型只有值没有引用,这样也就形成了一个问题返回一个基础数据类型好比一个字符串是没法跟踪他的状态的,因此咱们就须要讲基础数据类型包装一下,这有点像ReactHooks中的useRef,可是Vue包装的对象自己就是响应式数据源。好了咱们看一下实例理解一下git
// 定义建立响应式数据
const time = ref(new Date())
// 设置定时器为了测试数据响应
setInterval(() => time.value = new Date(), 1000)
// 判断某值是不是响应式类型
console.log('time is ref:', isRef(time))
console.log('time', time)
console.log('time.value', time.value)
// 咱们看看模板里面咱们这样展现
template: ` <div> <div>Date is {{ time }}</div> </div> `
复制代码
- toRefs 能够将reactive建立出的对象展开为基础类型
// 若是不用toRefs
const state = reactive({
count: 0,
plusOne: computed(() => state.count + 1)
})
return {
state
}
// 模板渲染要这样写
template: ` <div> <div>count is {{ state.count }} </div> <div>plusOne is {{ state.plusOne }}</div> </div> `
// 咱们再看看用了toRefs
const state = reactive({
count: 0,
plusOne: computed(() => state.count + 1)
})
return {
...toRefs(state)
}
// 模板渲染要这样写
template: ` <div> <div>count is {{ count }} </div> <div>plusOne is {{ plusOne }}</div> </div> `
复制代码
这个其实没有什么新东西github
watch(() => state.count * 2, val => {
console.log(`count * 2 is ${val}`)
})
复制代码
响应式对象修改会触发这个函数api
// 反作用函数
effect(() => {
console.log('数值被修改了..',state.count)
})
复制代码
const state = reactive({
count: 0,
plusOne: computed(() => state.count + 1)
})
复制代码
Vue3 | Vue3 |
---|---|
beforeCreate | setup(替代) |
created | setup(替代) |
beforeMount | onBeforeMount |
mounted | onMounted |
beforeUpdate | onBeforeUpdate |
updated | onUpdated |
beforeDestroy | onBeforeUnmount |
destroyed | onUnmounted |
errorCaptured | onErrorCaptured |
完整代码实现浏览器