vue3中使用依赖注入数组,在父子组件祖孙组件间传值

        项目中使用到在父子组件中使用依赖注入来保持数据,开始直接使用了数组,在修改数组的方法时,直接赋值数组,导致丢失了响应,重新整理实现代码如下:

1.在types文件中,实现依赖注入的方法:

 export type CurrentList ={
    list: Array<any>;
  };

  export const SYMBOL_LIST = Symbol("List") as InjectionKey<CurrentList>;

  export const useInjectList = () => {
    return inject(SYMBOL_LIST)!;
  };
  export const useProvideList = (list:CurrentList) => { 
    const value = reactive(list);
    provide(SYMBOL_COMMENTLIST, value); 
    return value;
  };

  export type ChangeList = (list:Array<any>) => void

  export const SYMBOL_CHANGELIST = Symbol("changeList") as InjectionKey<ChangeList>;
  
  export const useInjectChangeList = () => {
    return inject(SYMBOL_CHANGELIST)!;
  };
  
  export const useProvideChangeList = (fn:ChangeList) => {
    const value = reactive(fn);
    provide(SYMBOL_CHANGELIST, value);
    return value;
  };
   

2. 父组件实现依赖:

import { useProvideChangeList, useProvideList} from './utils/taskTypes'

let list: any[] = [];
const currentList = reactive({
  list:list
});

useProvideList(currentList); 

const changeListFun = (list:any) => {
  changeRefList(list);
};
useProvideChangeList(changeListFun);

const changeRefList = (list:any[])=>{
  ...
  currentList.list=list
}

3. 子组件中,需要列表或者使用修改列表的方法则使用一下代码:

import {  useInjectChangeList, useInjectList} from './utils/taskTypes'

// 使用列表
const refList=useInjectList();

// 修改列表的方法
const changeRefList=useInjectChangeList();

// 列表使用比如:
<a v-for="item in refList.list" :key="item.id">{
  {item.title}}</a>

// 在某处要修改数组则比如:

changeRefList(newList)

可能多个子组件或者子子组件需要该列表,或者需要修改该列表,则可以直接使用该上述方法。

相关推荐

  1. Vue3父子组件问题

    2024-01-03 17:26:01       14 阅读
  2. vue3父子组件

    2024-01-03 17:26:01       29 阅读
  3. vue父子组件

    2024-01-03 17:26:01       35 阅读
  4. vue3依赖注入解决根组件和多级组件问题

    2024-01-03 17:26:01       15 阅读
  5. vue3+vite+ts父子组件之间的

    2024-01-03 17:26:01       44 阅读
  6. vue3父子组件之间的方式

    2024-01-03 17:26:01       21 阅读
  7. vue3 <script setup> 形式父子组件

    2024-01-03 17:26:01       11 阅读
  8. Vue2之父子组件使用watch监听props的对象

    2024-01-03 17:26:01       7 阅读
  9. vue父子组件问题

    2024-01-03 17:26:01       23 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-03 17:26:01       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-03 17:26:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-03 17:26:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-03 17:26:01       18 阅读

热门阅读

  1. 今日学习的是mysql-事物

    2024-01-03 17:26:01       43 阅读
  2. 算法练习Day27 (Leetcode/Python-贪心算法)

    2024-01-03 17:26:01       32 阅读
  3. Linux内核--进程管理(十二)共享内存和信号量

    2024-01-03 17:26:01       31 阅读
  4. MongoDB CRUD 概述

    2024-01-03 17:26:01       34 阅读
  5. axios post YII2无法接收post参数问题解决

    2024-01-03 17:26:01       24 阅读
  6. pytorch 两个tensor的交集

    2024-01-03 17:26:01       37 阅读
  7. 通过 nvm 管理 Node 版本

    2024-01-03 17:26:01       44 阅读
  8. Unity 打包前,通过代码对 AndroidManifest 增删改查

    2024-01-03 17:26:01       37 阅读
  9. [嵌入式专栏](Qt - GUI框架)

    2024-01-03 17:26:01       43 阅读