举报投诉联系我们 手机版 热门标签 VUE中文网
您的位置:VUE中文网 > vue3组合式api太强了 Vue 3.0 组合式API

vue3组合式api太强了 Vue 3.0 组合式API

2023-02-27 21:17 VUE3教程

vue3组合式api太强了 Vue 3.0 组合式API

vue3组合式api太强了

Vue3的组合式API太强了,它把Vue2中的一些API进行了组合,使得开发者可以更加轻松地使用它们。

首先,Vue3的组合式API支持多个语言,包括JavaScript、TypeScript和CoffeeScript。这样,开发者就可以根据自己的喜好选择最适合自己的语言来编写代码。

其次,Vue3的组合式API也支持多个平台,包括Web、Native和Weex。这样,开发者就可以根据不同平台的需要来选择最适合自己的平台来进行开发。

此外,Vue3的组合式API也能够帮助开发者快速实现一些常用功能。例如:它能够帮助开发者快速实现数据驱动、响应式UI、单文件组件、路由和服务端呈现等功能。

// 使用 Vue 3 的 API 快速创建一个应用 
import { createApp } from 'vue' 
const app = createApp({ 
    data() { 
        return { 
            message: 'Hello World!' 
        } 
    }, 

    template: `<div>{{ message }}</div>` 
}) 

 // 渲染到 #app 元素上  
app.mount('#app')  														   

本节例子中代码使用的单文件组件语法

#setup

一个组件选项,在创建组件之前执行,一旦 props 被解析,并作为组合式 API 的入口点

  • 入参:
    • {Data} props
    • {SetupContext} context
  • 类型声明

interface Data {
  [key: string]: unknown
}


interface SetupContext {
  attrs: Data
  slots: Slots
  emit: (event: string, ...args: unknown[]) => void
}


function setup(props: Data, context: SetupContext): Data

TIP

若要获取传递给 setup() 的参数的类型推断,请使用 defineComponent 是需要的。

  • 示例:

使用模板:

  <!-- MyBook.vue -->
  <template>
    <div>{{ readersNumber }} {{ book.title }}</div>
  </template>

  
  <script>
    import { ref, reactive } from "vue"

  
    export default {
      setup() {
        const readersNumber = ref(0)
        const book = reactive({ title: "Vue 3 Guide" })

  
        // expose to template
        return {
          readersNumber,
          book
        }
      }
    }
  </script>

使用渲染函数:

  // MyBook.vue

  
  import { h, ref, reactive } from "vue"

  
  export default {
    setup() {
      const readersNumber = ref(0)
      const book = reactive({ title: "Vue 3 Guide" })
      // 请注意,我们需要在这里显式地暴露ref值
      return () => h("div", [readersNumber.value, book.title])
    }
  }

  • 参考:组合式 API setup

#生命周期钩子

可以使用直接导入的 onX 函数注册生命周期钩子:

import { onMounted, onUpdated, onUnmounted } from "vue"


const MyComponent = {
  setup() {
    onMounted(() => {
      console.log("mounted!")
    })
    onUpdated(() => {
      console.log("updated!")
    })
    onUnmounted(() => {
      console.log("unmounted!")
    })
  }
}

这些生命周期钩子注册函数只能在 setup() 期间同步使用,因为它们依赖于内部全局状态来定位当前活动实例 (此时正在调用其 setup() 的组件实例)。在没有当前活动实例的情况下调用它们将导致错误。

组件实例上下文也是在生命周期钩子的同步执行期间设置的,因此在生命周期钩子内同步创建的侦听器和计算属性也会在组件卸载时自动删除。

选项 API 生命周期选项和组合式 API 之间的映射

  • beforeCreate -> use setup()
  • created -> use setup()
  • beforeMount -> onBeforeMount
  • mounted -> onMounted
  • beforeUpdate -> onBeforeUpdate
  • updated -> onUpdated
  • beforeUnmount -> onBeforeUnmount
  • unmounted -> onUnmounted
  • errorCaptured -> onErrorCaptured
  • renderTracked -> onRenderTracked
  • renderTriggered -> onRenderTriggered
  • 参考:组合式 API 生命周期钩子

#Provide / Inject

provideinject 启用依赖注入。只有在使用当前活动实例的 setup() 期间才能调用这两者。

  • 类型声明

interface InjectionKey<T> extends Symbol {}


function provide<T>(key: InjectionKey<T> | string, value: T): void


// without default value
function inject<T>(key: InjectionKey<T> | string): T | undefined
// with default value
function inject<T>(key: InjectionKey<T> | string, defaultValue: T): T

Vue 提供了一个 InjectionKey 接口,该接口是扩展 Symbol 的泛型类型。它可用于在提供者和消费者之间同步注入值的类型:

import { InjectionKey, provide, inject } from "vue"


const key: InjectionKey<string> = Symbol()


provide(key, "foo") // 提供非字符串值将导致错误


const foo = inject(key) // foo 的类型: string | undefined

如果使用字符串 key 或非类型化 symbols,则需要显式声明注入值的类型:

const foo = inject<string>("foo") // string | undefined

  • 参考

  • Provide / Inject
  • 组合式 API Provide / Inject

#getCurrentInstance

getCurrentInstance 允许访问对高级使用或库创建者有用的内部组件实例。

import { getCurrentInstance } from "vue"


const MyComponent = {
  setup() {
    const internalInstance = getCurrentInstance()


    internalInstance.appContext.config.globalProperties // access to globalProperties
  }
}

getCurrentInstance 仅在安装或生命周期挂钩期间有效。

在安装程序或生命周期挂钩之外使用时,请在setup上调用getCurrentInstance(),并改用该实例。

const MyComponent = {
  setup() {
    const internalInstance = getCurrentInstance() // works


    const id = useComponentId() // works


    const handleClick = () => {
      getCurrentInstance() // doesn"t work
      useComponentId() // doesn"t work


      internalInstance // works
    }


    onMounted(() => {
      getCurrentInstance() // works
    })


    return () =>
      h(
        "button",
        {
          onClick: handleClick
        },
        `uid: ${id}`
      )
  }
}


// also works if called on a composable
function useComponentId() {
  return getCurrentInstance().uid
}
阅读全文
以上是VUE中文网为你收集整理的vue3组合式api太强了 Vue 3.0 组合式API全部内容。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
相关文章
  • vue自定义指令实现 Vue 3.0 自定义指令

    vue自定义指令实现 Vue 3.0 自定义指令

    2023-02-27 VUE3教程

    #简介除了核心功能默认内置的指令 (v-model 和 v-show),Vue 也允许注册自定义指令。注意,在 Vue2.0 中,代码复用和抽象的主要...

  • vue 3.0 teleport

    vue 3.0 teleport

    2023-02-26 VUE3教程

    Vue 鼓励我们通过将 UI 和相关行为封装到组件中来构建 UI。我们可以将它们嵌套在另一个内部,以构建一个组成应用程序 UI 的树。...

  • vue插件大全 Vue 3.0 插件

    vue插件大全 Vue 3.0 插件

    2023-02-23 VUE3教程

    插件是自包含的代码,通常向 Vue 添加全局级功能。它可以是公开 install() 方法的 object,也可以是 function插件的功能范围没有...

  • vue3.0入门 Vue 3.0 基础

    vue3.0入门 Vue 3.0 基础

    2023-02-25 VUE3教程

    Web 可访问性 (也称为 a11y) 是指创建可供任何人使用的网站的实践方式——无论是身患某种障碍、通过慢速的网络连接访问、使用老...

  • vue 资源路径 Vue 3.0 资源

    vue 资源路径 Vue 3.0 资源

    2023-02-26 VUE3教程

    #文档WCAG 2.0WCAG 2.1可访问的富 Internet 应用程序 (WAI-ARIA) 1.2WAI-ARIA 创作实践 1.2#辅助技术屏幕阅读器NVDAVoiceOver[JA...

© 2024 VUE中文网 vue88.com 版权所有 联系我们