Vue3

Vue3基础之provide/inject依赖和注入

2023-06-26  本文已影响0人  翟小乙

简述

在项目中,父组件传值数据给子组件,我们都知道怎么实现,那么父组件传值给子组件的子组件呢?我们一般想法是通过传值子组件,子组件再传值给子的子组件。这样维护不容易还容易出现问题,那么Vue为我们提供了provide/inject,依赖和注入。

关键引入
  import {provide } from 'vue';  //提供/依赖
  import { inject } from 'vue';   // 注入
  1. 第一个参数被称为注入名,可以是一个字符串或是一个 Symbol。后代组件会用注入名来查找期望注入的值。一个组件可以
    多次调用 provide(),使用不同的注入名,注入不同的依赖值。
  2. 第二个参数是提供的值,值可以是任意类型,包括响应式的状态,比如一个 ref
  3. 注入方的组件不可更改 readonly
<script setup>
import { ref, provide, readonly } from 'vue'

const count = ref(0)
provide('read-only-count', readonly(count))
</script>
  1. 默认情况下,inject 假设传入的注入名会被某个祖先链上的组件提供。如果该注入名的确没有任何组件提供,则会抛出一个运行时警告
  2. 如果在注入一个值时不要求必须有提供者,那么我们应该声明一个默认值,和 props 类似:const value = inject('message', '这是默认值')
结构
代码
<template>
<div> 
   <div class="div1">
       <button @click="tailNum">
           传值子组件们
       </button> 
       <A></A>
   </div> 
</div>
</template>
<script setup>  
import {ref, provide } from 'vue'; 
import A from './A.vue';
const count = ref(0)   
provide(/* 注入名 */ 'num', /* 值 */ count)
const tailNum = ()=>{
   count.value++
} 
</script>
<template>
  <div>
     这是A组件,获取到父组件信息是:{{num}}
      <B></B>
  </div>
</template>
<script setup>
  import { inject } from 'vue';
  import B from './B.vue' 
  const num = inject('num')
</script>
<template>
    <div>
       这是B组件,获取到父父组件信息是:{{num}}
    </div>
  </template>
  <script setup> 
  import { inject } from 'vue';
  const num = inject('num')
  </script> 
上一篇下一篇

猜你喜欢

热点阅读