https://v3.cn.vuejs.org/api/global-api.html#createapp

  1. // vue 3.0
  2. import { createApp } from 'vue'
  3. import App from './App.vue'
  4. const app = createApp(App);
  5. app.mount('#app') // mount这个方法,和ReactDOM.render方法的作用感觉差不多
  6. // app.unmount() 可以使用它,卸载组件了
  7. // vue 2.0
  8. new Vue({
  9. el: "#app",
  10. data: {},
  11. })
  12. /* 真实DOM
  13. <div id="app">
  14. <p>{{ foo }}</p>
  15. <!-- 这里的 `foo` 不会更新! -->
  16. <button v-on:click="foo = 'baz'">Change it</button>
  17. </div>
  18. */
  19. 或者
  20. vue 2.0
  21. var MyComponent = Vue.extend({
  22. template: '<div>Hello!</div>'
  23. })
  24. // 创建并挂载到 #app (会替换 #app)
  25. new MyComponent().$mount('#app')
  1. app.use(MyPlugin)
  2. 2.x3.x完全不同
  3. 3.x app.config.globalProperties里面加东西
  4. export default {
  5. install: function (app, opts = {size : undefined, zIndex : undefined}) {
  6. components.forEach(component => {
  7. app.component(component.name, component);
  8. });
  9. app.config.globalProperties.$ELEMENT = {
  10. size: opts.size || '',
  11. zIndex: opts.zIndex || 2000
  12. };
  13. }
  14. }
  15. 2.x 是往Vue.prototype里面加东西
  16. MyPlugin.install = function (Vue, options) {
  17. // 1. 添加全局方法或 property
  18. Vue.myGlobalMethod = function () {
  19. // 逻辑...
  20. }
  21. // 2. 添加全局资源
  22. Vue.directive('my-directive', {
  23. bind (el, binding, vnode, oldVnode) {
  24. // 逻辑...
  25. }
  26. ...
  27. })
  28. // 3. 注入组件选项
  29. Vue.mixin({
  30. created: function () {
  31. // 逻辑...
  32. }
  33. ...
  34. })
  35. // 4. 添加实例方法
  36. Vue.prototype.$myMethod = function (methodOptions) {
  37. // 逻辑...
  38. }
  39. }
  1. vue2.x生命周期
  2. beforeCreate
  3. created
  4. beforeMount
  5. mounted
  6. beforeUpdate
  7. updated
  8. activated 配合keep-alive使用的
  9. deactivated
  10. beforeDestory
  11. destoryed
  12. errorCaptured
  13. vue3.x中去掉了beforeDestory,destoryed
  14. beforeUnmountunmounted代替了
  15. 还加入了两个生命周期
  16. renderTracked (e: DebuggerEvent) => void
  17. 跟踪虚拟 DOM 重新渲染时调用。钩子接收 debugger event 作为参数。此事件告诉你哪个操作跟踪了组件以及该操作的目标对象和键。
  18. renderTriggered (e: DebuggerEvent) => void
  19. 当虚拟 DOM 重新渲染被触发时调用。和 renderTracked 类似,接收 debugger event 作为参数。此事件告诉你是什么操作触发了重新渲染,以及该操作的目标对象和键。
  1. // 之前(Vue 2.x)
  2. Vue.prototype.$http = () => {}
  3. // 之后(Vue 3.x)
  4. const app = createApp({})
  5. app.config.globalProperties.$http = () => {}
  1. npm install vue-router@next
  2. npm install vuex@next --save
  1. // vue3,vue2 都有
  2. Vue.config.errorHandler = function (err, vm, info) {
  3. // handle error
  4. // `info` 是 Vue 特定的错误信息,比如错误所在的生命周期钩子
  5. // 只在 2.2.0+ 可用
  6. }

vue 3.x

defineComponent

从实现上看,defineComponent 只返回传递给它的对象。但是,就类型而言,返回的值有一个合成类型的构造函数,用于手动渲染函数、TSX 和 IDE 工具支持

defineAsyncComponent

创建一个只有在需要时才会加载的异步组件

resolveComponent(name) name 是组件名称

只能在render或setup中使用

  1. const app = createApp({})
  2. app.component('MyComponent', {
  3. /* ... */
  4. })
  5. import { resolveComponent } from 'vue'
  6. render() {
  7. const MyComponent = resolveComponent('MyComponent')
  8. }

resolveDynamicComponent(String | Object (组件的选项对象))

允许使用与 相同的机制来解析一个 component。

resolveDirective

如果在当前应用实例中可用,则允许通过其名称解析一个 directive。

  1. const app = createApp({})
  2. app.directive('highlight', {})
  3. import { resolveDirective } from 'vue'
  4. render () {
  5. // 返回一个 Directive。如果没有找到,则返回 undefined。
  6. const highlightDirective = resolveDirective('highlight')
  7. }

withDirectives

允许将指令应用于 VNode。返回一个包含应用指令的 VNode。

  1. import { withDirectives, resolveDirective } from 'vue'
  2. const foo = resolveDirective('foo')
  3. const bar = resolveDirective('bar')
  4. return withDirectives(h('div'), [
  5. [foo, this.x],
  6. [bar, this.y]
  7. ])

createRenderer 自定义渲染器

https://v3.cn.vuejs.org/api/global-api.html#createrenderer

nextTick

将回调推迟到下一个 DOM 更新周期之后执行。在更改了一些数据以等待 DOM 更新后立即使用它。

  1. import { createApp, nextTick } from 'vue'
  2. const app = createApp({
  3. setup() {
  4. const message = ref('Hello!')
  5. const changeMessage = async newMessage => {
  6. message.value = newMessage
  7. await nextTick()
  8. console.log('Now DOM is updated')
  9. }
  10. }
  11. })

mergeProps 合并属性值

  1. import { h, mergeProps } from 'vue'
  2. export default {
  3. inheritAttrs: false,
  4. render() {
  5. const props = mergeProps({
  6. // 该 class 将与 $attrs 中的其他 class 合并。
  7. class: 'active'
  8. }, this.$attrs)
  9. return h('div', props)
  10. }
  11. }

useCssModule

允许在 setup单文件组件函数中访问 CSS 模块。

  1. <script>
  2. import { h, useCssModule } from 'vue'
  3. export default {
  4. setup () {
  5. const style = useCssModule()
  6. return () => h('div', {
  7. class: style.success
  8. }, 'Task complete!')
  9. }
  10. }
  11. </script>
  12. <style module>
  13. .success {
  14. color: #090;
  15. }
  16. </style>