vue3.0新特性初体验(二)下

简介: vue3.0新特性初体验(二)下

provide & inject

provide并inject启用类似于2.x provide/inject选项的依赖项注入。两者都只能在setup()当前活动实例期间调用。

import { provide, inject } from 'vue'
const ThemeSymbol = Symbol()
const Ancestor = {
  setup() {
    provide(ThemeSymbol, 'dark')
  }
}
const Descendent = {
  setup() {
    const theme = inject(ThemeSymbol, 'light' /* optional default value */)
    return {
      theme
    }
  }
}

inject接受可选的默认值作为第二个参数。如果未提供默认值,并且在Provide上下文中找不到该属性,则inject返回undefined

使用响应式

为了保持提供的值和注入的值之间的响应式,可以使用ref:

// in provider
const themeRef = ref('dark')
provide(ThemeSymbol, themeRef)
// in consumer
const theme = inject(ThemeSymbol, ref('light'))
watch(() => {
  console.log(`theme set to: ${theme.value}`)
})


模板引用

使用Composition API时,响应式引用和模板引用的概念是统一的。为了获得对模板中元素或组件实例的引用,我们可以像往常一样声明ref并从中返回setup():

<template>
  <div ref="root"></div>
</template>
<script>
import { ref, onMounted } from 'vue'
export default {
  setup() {
    const root = ref(null)
    onMounted(() => {
      // the DOM element will be assigned to the ref after initial render
      console.log(root.value) // <div/>
    })
    return {
      root
    }
  }
}
</script>

用作模板ref的ref的行为与其他任何ref一样:它们是响应式的,可以传递到组合函数中(或从中返回)。

  • Render/ JSX的用法
export default {
  setup() {
    const root = ref(null)
    return () => h('div', {
      ref: root
    })
    // with JSX
    return () => <div ref={root}/>
  }
}
  • 内部用法 v-for

Composition API template refs do not have special handling when used inside v-for. Instead, use function refs (new feature in 3.0) to perform custom handling:

<template>
  <div
    v-for="(item, i) in list"
    :ref="el => { divs[i] = el }">
    {{ item }}
  </div>
</template>
<script>
import { ref, reactive, onBeforeUpdate } from 'vue'
export default {
  setup() {
    const list = reactive([1, 2, 3])
    const divs = ref([])
    // make sure to reset the refs before each update
    onBeforeUpdate(() => {
      divs.value = []
    })
    return {
      list,
      divs
    }
  }
}
</script>

defineComponent

该功能仅用于类型推断。为了让TypeScript知道应该将对象视为组件定义,以便可以推断传递给的数据的类型,这是必需的setup()。这是无操作行为的明智选择。它需要一个组件定义并按原样返回参数。

import { defineComponent } from 'vue'
export default defineComponent({
  props: {
    foo: String
  },
  setup(props) {
    props.foo // <- type: string
  }
})

最近:

vue3.0新特性初体验(一)

相关文章
|
1月前
|
JavaScript 前端开发 开发者
Vue第1天:特性概览
Vue第1天:特性概览
21 1
|
5月前
|
JavaScript 算法 编译器
Vue3的新特性
Vue3的新特性
|
5月前
|
缓存 JavaScript
Vue3 的模板语法:指令、插值语法和其他相关特性
Vue3 的模板语法:指令、插值语法和其他相关特性
109 4
Vue3 的模板语法:指令、插值语法和其他相关特性
|
9天前
|
开发框架 JavaScript 算法
了解vue3的基本特性和底层原理
Vue3的底层原理涵盖了响应式系统的Proxy-based实现、组件的模板编译与渲染更新机制、组合式API带来的逻辑组织变革,以及其他关键特性的具体实现。这些原理共同构成了Vue3强大、高效、灵活的现代前端开发框架基础。
22 2
|
16天前
|
JavaScript 前端开发 编译器
Vue 3:新特性与改进技术详解
【4月更文挑战第25天】Vue 3 提升了编译和运行时性能,引入了Composition API实现灵活代码复用,新增Teleport用于任意位置渲染,支持Fragment多根节点及Suspense处理异步组件。同时,TypeScript支持增强,自定义指令和全局API也得到优化。Vue 3的新特性旨在提供更高效、灵活的开发体验,持续引领前端技术发展。
|
23天前
|
JavaScript 前端开发 API
Vue3有哪些新特性
【4月更文挑战第15天】 Vue3带来了显著性能提升和开发体验优化:更快的渲染速度、更小的捆绑体积、改进的内存管理、增强的TypeScript支持、引入Composition API提升代码复用性,以及使用Proxy改进响应式数据处理。这些特性使Vue3成为更高效、灵活和可靠的框架,为开发者创造高性能应用提供了强大工具。
11 0
|
1月前
|
JavaScript 前端开发
Vue 中setup的特性
Vue 中setup的特性
|
1月前
|
JavaScript 前端开发 编译器
vue3带来的新特性/亮点
vue3带来的新特性/亮点
14 0
|
6月前
|
JavaScript 前端开发 编译器
你知道Vue 3.0中Treeshaking特性吗?
你知道Vue 3.0中Treeshaking特性吗?
106 0
|
4月前
|
JavaScript 前端开发 API
Vue.js 3.0新特性解读:开启前端开发新纪元
Vue.js作为前端开发中备受欢迎的框架,近期推出了全新的3.0版本,本文将对Vue.js 3.0的新特性进行深入解读,带领读者探索前端开发的新纪元。