Vue中的Provide/Inject 实现响应式数据

news/2024/7/10 3:02:21 标签: vue

Vue中, Provide/Inject实现了跨组件的通信。但可惜数据并不是响应式的(设计如此)。

提示:provide 和 inject 绑定并不是可响应的。这是刻意为之的。然而,如果你传入了一个可监听的对象,那么其对象的 property 还是可响应的

以上引用自官网

可能之所以这样设计,是为了避免数据的混乱。就如同props不能被子组件直接修改一样。

从代码角度讲

  data() {
    return {
		foo: 'foo',
		bar: 'bar'
		baz: {hello: 'world'}
	}
  },
  provide() {
    return {
      foo: this.foo,
      bar: this.bar,
    }
  },

当我们以如上的形式书写代码的时候,其实相当于对this.foothis.baz做了一层浅拷贝,固当子组件inject的时候已经丢失了响应式功能了。但由于仅仅是浅拷贝,所以响应式对象的属性仍旧是响应式的。

  // 父组件
  provide() {
    return {
      baz: this.baz,
    }
  },
  // 子组件baz.hello仍旧是响应式的。
  inject: ['baz']
  

依照这个思路,如果我们希望整个数据都是响应式的。那么可以通过一下的方法实现:

// 父组件:
{
  provide() {
    return {
      reactiveMsg: () => this.msg
    }
  },
}

// 子组件:
{
  inject: ['reactiveMsg'],

  computed: {
    computedProperty() {
      return this.reactiveMsg()
    }
  },
  watch: {
	computedProperty() {
		console.log('数据改变')
	}
  }
}

如上provide提供一个函数。函数内部返回一个响应式的数据。此时整条数据的响应式的状态并不会丢失。

而且这样做有一个好处,即无法直接修改computedProperty的值,因为他是一个计算属性。这样就可以避免数据的混乱。


http://www.niftyadmin.cn/n/1382607.html

相关文章

必看!一名全栈工程师的必备“百宝箱”

全栈工程师,也叫全端工程师,是指掌握多种技能,并能利用多种技能独立完成产品的人。全栈工程师熟悉多种开发语言,同时具备前端和后台开发能力,从需求分析,原型设计到产品开发,测试,部…

2016.5.20反思

今天有两个事情需要好好反思一下。 1、购买《一平米健身》配套的器械 京东上预定的斌卡的硬派健身系列-《一平米健身》,书籍有配套的家庭训练器材,自己前期也去京东上看了,当时因为没有看到书籍的内容,所以没有购买。拿到书后&…

了解HTTP协议栈(实践篇)

关于http协议的理论知识,我在这里就不详细说明了,具体下面给出的链接有。接下来都是用具体的操作显示的,各位可以结合起来看。 一、使用nc打开端口,并使用浏览器进行访问 (对应文章中的HTTP协议详解之请求篇) nc -lp 8888 #使…

vue-12-element组件库

1, 官网: http://element.eleme.io/#/zh-CN 2, 安装 npm i element-ui -S i : install, -S --save-dev 的简写 3, 使用 安需饮用的方式 npm install babel-plugin-component -D 修改 .babelrc 文件 {"presets": [["env", {"modules": false,…

vue服务端渲染vue-server-render支持的模板语法

在vue ssr官方文档中,并没有一一说明渲染模板都支持那些语法。仅仅是简单的说了,支持 {{}} 转义插值{{{}}} 插入HTML 如果想使用别的模板语法,官方并未提及。其实,他的模板语法支持的不止于此,因为其也是使用了第三方…

四分之三的企业热衷于大数据

根据调查机构Gartner对IT业务及其管理者最近的一项调查,超过四分之三的公司2014年对未来两年大数据的投资或计划投资增加3%。 这是去年6月Gartner对其研究圈的437名会员进行的调查,包括各行业的全球机构,无论是Gartner公司的客户和非客户。 “…

10个好用的Python集成开发环境

Python IDE工具是每个Python工程师必须使用的开发工具,选择正确的编辑器对Python编程效率的影响是非常大的,因此选择合适的Python开发工具十分重要,以下是通过长期实践发掘的好用的Python IDE,它们功能丰富,性能先进&a…

pageContext对象

PageContext类主要的描述的是的JSP页面的上下文环境&#xff0c;可以获取servlet的信息、也可以将当前JSP的上下文环境传递给指定的类实现对JSP页面的操作。 1. 获取JSP中所有的数据 1 <%2 3 out.write( (pageContext.getRequest() request ) "<br/>");4 …