optionsAPI –> compositionAPi
composititionAPI 字面意思就是组合API, 它是为了实现基于函数逻辑复用机制而产生的
举个简单的例子
声明变量
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| const { reactive } = Vue
const App = { template: ` <div> {{message}} </div> `, setup() { const state = reactive({ message: 'HelloWorld!!!' }) return { ...state, } }, }
Vue.createApp().mount(App, '#app')
|
双向绑定
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| const { reactive } = Vue
const App = { template: ` <div> <input type="text" v-model="state.value"/> </div> `, setup() { const state = reactive({ value: 'Hello Vue' }) return { state, } }, }
Vue.createApp().mount(App, '#app')
|
- setup
- 被诟病的地方,内容要写在这个地方,setup实际上是一个组件的入口, 它运在组件被实例化的时候, props 属性被定义后,实际上等价于vue2版本的beforeCreate 和Created这两个生命周期
- reactive
- 创建一个响应式的状态,几乎等价于vue2.x中的Vue.observable()API, 为了避免于rxjs中的observable混淆进行了重命名
观察属性
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| import { reactive, watchEffect } from 'vue'
const state = reactive({ count: 0, })
watchEffect(() => { document.body.innerHtml = `count is ${state.count}` })
return { ...state, }
|
- watchEffect 和 2.x 中的watch选项类似,但是它不需要把被依赖的数据源和副作用回调分开. 组合式API同样提供了一个watch函数,其行为和2.x的选项完全一致.
ref
vue3 允许用户创建单个响应对象
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| const App = { template: ` <div> {{value}} </div> `,
setup() { const value = ref(0) return { value } }, }
Vue.createApp().mount(App, '#app')
|
计算属性
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| setup() { const state = reactive({ count: 0, double: computed(() => state.count*2) }) function increment() { state.count++; }
return { state, increment } }
|
生命周期的变更
vue2 |
vue3 |
beforeCreate |
setup |
created |
setup |
beforeMount |
onBeforeMount |
mounted |
onMounted |
beforeUpdate |
onBeforeUpdate |
updated |
onUpdated |
beforeDestory |
onBeforeUnmount |
destroyed |
onUnmounted |
errorCaptured |
onErrorCaptured |
生命周期使用举例
1 2 3 4 5 6 7 8 9 10
| import { onMounted } from 'vue'
export default { setup() { onMounted(() => { console.log(`component is mounted`) }) }, }
|
- 重构了虚拟DOM,保持了兼容性, 使dom 脱离模版渲染,提升性能
- 优化了模版编译过程,增加patchFlag,遍历节点的时候,会跳过静态节点
- 高效的组件初始化
- 组件upload的过程性能提升1.3~2倍
- SSR速读提升2~3被
参考:
<每日前端APP> 连接暂无