vue2 provide 后 inject 数据不是响应式的,不实时更新

今天用 provide 后,inject 获取数据时不是实时更新的,获取的不是更新后的值

祖父组件

html 复制代码
<div style="text-align: left !important;">
  <button @click="change">更改</button>
</div>


  data() {
    return {
      name: 'init'
    }
  },
  provide() {
    return {
      name: this.name
    }
  },
  methods: {
    change() {
      this.name = 'change'
    }
  }

子孙组件

html 复制代码
<template>
  <div class="demo-select">
    name: {{ name }}
  </div>
</template>

export default {
  inject: ['name']
};

点击更改按钮 name 值不变

**原因:**传的初始值是空,不是引用类型,所以不会变成响应式,可以传 函数或是引用类型

改法一:传函数类型

祖父组件

html 复制代码
<div style="text-align: left !important;">
  <button @click="change">更改</button>
</div>


  data() {
    return {
      name: 'init'
    }
  },
  provide() {
    return {
      name: () => this.name
    }
  },
  methods: {
    change() {
      this.name = 'change'
    }
  }

子孙组件

html 复制代码
<template>
  <div class="demo-select">
    name: {{ name() }}
  </div>
</template>

export default {
  inject: ['name']
};

name: () => this.name 变成函数式,每次取值都是调用函数取最新值

改法二:传引用类型

祖父组件

html 复制代码
<div style="text-align: left !important;">
  <button @click="change">更改</button>
</div>


  data() {
    return {
      pro: { name: 'init' }
    }
  },
  provide() {
    return {
      pro: this.pro
    }
  },
  methods: {
    change() {
      this.pro.name = 'change'
    }
  }

子孙组件

html 复制代码
<template>
  <div class="demo-select">
    name: {{ pro && pro.name }}
  </div>
</template>

export default {
  inject: ['pro']
};

引用类型会变为响应式。

相关推荐
很晚很晚了1 天前
纯前端转全栈 Day 1:我从第一个 NestJS 接口开始
前端
Lee川1 天前
从零解剖一个 AI Agent Tool是如何实现的
前端·人工智能·后端
wangruofeng1 天前
Playwright 深度调研:为什么它成了浏览器自动化的新底座
前端·测试
2401_833269301 天前
Java网络编程入门
java·开发语言
金銀銅鐵1 天前
[Java] 如何将 Lambda 表达式对应的类保存到 class 文件中?
java·后端
それども1 天前
Gradle 构建疑难杂症 Could not find netty-transport-native-epoll-linux-aarch_64.ja
java·服务器·gradle·maven
正儿八经的少年1 天前
application.yml 系列配置文件作用与区别
java·配置文件
李白的天不白1 天前
SSR服务端渲染
前端
鱼很腾apoc1 天前
【学习篇】第20期 超详解 C++ 多态:从语法规则到底层原理
java·c语言·开发语言·c++·学习·算法·青少年编程
NightReader1 天前
CPU 高使用率,怎么降下来
运维·服务器