• createApp
  • emits 属性
  • 生命周期
  • 多事件
  • Fragment
  • 移除 .sync
  • 异步组件的写法
  • 移除 filter
  • Teleport
  • Suspense
  • Composition API

createApp

  1. // vue2
  2. const app = new Vue({ /* 选项 */ })
  3. // vue3
  4. const app = Vue.createApp({ /* 选项 */ })
  5. // vue2
  6. Vue.use()
  7. Vue.mixin()
  8. Vue.component()
  9. Vue.direction()
  10. // vue3
  11. app.use()
  12. app.mixin()
  13. app.component()
  14. app.direction()

emits 属性

  1. // 父组件
  2. <HelloWorld :msg="msg" @onSayHello="sayHello" />
  3. // 子组件
  4. export default {
  5. name: "HelloWorld",
  6. props: {
  7. msg: String
  8. },
  9. // vue3需要声明父组件传递来的事件名
  10. emits: ['onSayHello'],
  11. setup(props, {emit}) {
  12. emit('onSayHello', 'payload')
  13. }
  14. }

多事件处理

  1. <!--多事件处理-->
  2. <button @click="one($event), two($event)">Submit</button>

Fragment

  1. <!-- vue2 -->
  2. <template>
  3. <div>必须有一个根节点</div>
  4. </template>
  5. <!-- vue3 -->
  6. <template>
  7. <div>无须必有一个根节点</div>
  8. <div>无须必有一个根节点</div>
  9. </template>

移除 .sync

  1. <!-- vue2 -->
  2. <MyComponent v-bind:title.sync="title" />
  3. <!-- vue3 -->
  4. <MyCompoent v-model:title="title />

异步组件的写法

  1. <!-- vue2 -->
  2. new Vue({
  3. components: {
  4. 'my-component': () => import('./my-async-component.vue')
  5. }
  6. })
  7. <!-- vue3 -->
  8. import {createApp, defineAsyncComponent} from 'vue'
  9. createApp({
  10. components: {
  11. AsyncComponent: defineAsyncComponent(() =>
  12. import('./components/AsyncComponent.vue')
  13. )
  14. }
  15. })

移除 filter

平时也不使用,一般都在 computed 中就计算了

  1. <!-- 以下 filter vue3 中不可用了!!! -->
  2. <!-- 在双花括号中 -->
  3. {{ message | capitalize }}
  4. <!-- `v-bind` -->
  5. <div v-bind:id="rawId | formatId"></div>

Teleport

  1. <button @click="modalOpen = true">open</button>
  2. <teleport to="body">
  3. <div v-if="modalOpen" class="modal">
  4. <div>
  5. telePort 弹窗 (父元素是 body)
  6. <button @click="modalOpen = false">close</button>
  7. </div>
  8. </div>
  9. </teleport>

Suspense

类似于自己实现的加载中的效果

  1. <Suspense>
  2. <template>
  3. <Test1 /> <!-- 是一个异步组件 -->
  4. </template>
  5. <!--
  6. #fallback 就是一个具名插槽。
  7. 即 Suspense 组件内部,有两个 slot,
  8. 其中一个具名为 fallback
  9. -->
  10. <template>
  11. Loading...
  12. </template>
  13. </Suspense>

Composition API

  • reactive
  • ref 相关
  • readonly
  • watch 和 watchEffect
  • setup
  • 生命周期钩子函数