请问老师为什么不是响应式

来源:8-11 provide+inject实现组件通信

hy_wang

2020-09-08

老师我想请问下关于provide提供一个方法这个方法返回一个对象,然后使用计算属性监听调用这个方法这种方式和我直接provide一个对象然后使用computed有什么原理上的不同。
老师我明白第二种方式不会是响应式的,我自己实践也发现了。可是还是想请问老师为什么,我明明使用computed监听了这个provide提供的data。它和老师你调用方法return的本质也是这个对象,为什么这种方式就不是响应式

写回答

2回答

hy_wang

提问者

2020-09-09

<!-- @date: 2020-08-12 10:57:26 -->

<template>
  <div class="testView">{{test}}</div>
</template>

<script>
export default {
  data() {
    return {};
  },
  inject: ["getTest"],
  computed: {
    test() {
      return this.getTest();
    },
  },
};
</script>
<template>
  <div>
    <!-- <router-view /> -->
    <test-view />
  </div>
</template>



<script>
import testView from "./testView";
export default {
  components: {
    testView,
  },
  provide() {
    return {
      getTest: this.getTest
    }
  },
  methods: {
    getTest() {
      return this.test;
    },
  },
  data() {
    return {
      test: 1,
      form: {
        filds: [
          { id: 3, name: "wanghaoyu", age: 23 },
          { id: 4, name: "wanghaoyu1", age: 24 },
        ],
      },
    };
  },
  mounted() {
    setInterval(() => {
      this.test++;
    }, 1000);
  },
};
</script>


1
5
刘信强2
回复
希卡利
Test
2022-05-12
共5条回复

希卡利

2020-09-09

为什么会提供方法以供 provide 使用视频里面已经说过了,为了防止 组件实例化的时候 provide 默认实例化 null 数据

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

所以不是 computed 监听出了问题,而是 provide 本身和 inject 就不是可响应的数据 除非使用引用类型的数据,你可以多翻翻官方文档

1
13
hy_wang
回复
希卡利
子页面的test会随着setInterval变化而页面跟随刷新
2020-09-09
共13条回复

数据可视化入门到精通-打造前端差异化竞争力

同级别前端,掌握数据可视化薪资更高

1520 学习 · 1043 问题

查看课程