Allen's blog Allen's blog
首页
面经
算法 (opens new window)
分类

Allen

前端CV工程师
首页
面经
算法 (opens new window)
分类
  • Javascript

  • TypeScript

  • CSS

  • Vue

    • Vue样式scoped原理以及样式穿透原理
    • inject响应式怎么做
    • Vue状态管理工具Vuex
    • Vue状态管理工具Pinia
    • Vue重用的组件中使用有状态methods(如防抖)有问题
    • vue3 props unknown属性上不存在xxx
    • Vuex中的状态如果是引用类型,没有响应式
    • typescript类型Element转化为HTMLElement
  • React

  • 框架和构建工具

  • 工具库

  • 常见业务场景

  • Bug

  • 项目实战

  • 前端
  • Vue
Allen
2023-05-20

inject响应式怎么做

想要使用 provide/inject 实现祖先组件传递一些公共数据到子孙组件中,但是官方文档说了,provide 默认不支持响应式数据,如果需要响应式,可以传递一个引用对象数据。

{
    data(){
        return {
            config: {
                variable: 'this is reactive'
            },
            data: 'this is not reactive'
        }
    },
    provide: {
        config: this.config,
        config2: {
            veriable: this.data
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

虽然都是传了对象给 provide,但是只有config是可以响应式的,config2不具有响应式。在父组件修改this.data,子孙组件不会有响应式的改变。

与此同时,在父组件中修改this.config后,子孙组件inject的config将失去响应式。

根据上面的尝试,最终还是没有使用 provide/inject 传递数据的方案。因为有些数据虽然是要层层传递到子孙组件,实现共享,但是也有需要响应式的场景,这个时候,使用 provide 无法防止父组件意外地对其重新赋值,没有什么能够保证 provide 的响应式对象不被修改。所以最后还是交给了 vuex 来进行数据管理。

如果什么数据都往 vuex 里面放,会发现 vuex 变得臃肿,难以维护,因此provide/injectapi 还是有价值的。

在 Vue3 里面,他们可以传递响应式数据了,在 Vue3 中感觉可以得到更好的发挥。

需要 provide 响应式不是想在子孙组件里面修改它的值,而是想在父组件中修改,让子孙组件得到修改后的值。因为不建议在一个组件中的变量被其他组件给直接修改,只有会不利于维护。

上次更新: 2023/12/16, 09:22:46
Vue样式scoped原理以及样式穿透原理
Vue状态管理工具Vuex

← Vue样式scoped原理以及样式穿透原理 Vue状态管理工具Vuex→

最近更新
01
rollup使用配置文件rollup.config.ts打包
12-08
02
package.json导出类型
12-08
03
关键问题方案
11-17
更多文章>
Theme by Vdoing | Copyright © 2023-2023 Allen | Github
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式