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 天前
Flutter&TolyUI#12 | 树形组件 toly_tree 重磅推出!
android·前端·flutter
月明长歌1 天前
【码道初阶】LeetCode 622:设计循环队列:警惕 Rear() 方法中的“幽灵数据”陷阱
java·算法·leetcode·职场和发展
程序员根根1 天前
SpringBoot Web 入门核心知识点(快速开发案例 + 分层解耦实战)
java·spring boot
Dylan的码园1 天前
链表与LinkedList
java·数据结构·链表
【非典型Coder】1 天前
JVM 垃圾收集器中的记忆集与读写屏障
java·开发语言·jvm
柯南二号1 天前
【大前端】【Android】一文详解Android MVVM 模式详情解析
android·前端
feathered-feathered1 天前
Redis【事务】(面试相关)与MySQL相比较,重点在Redis事务
android·java·redis·后端·mysql·中间件·面试
Mintopia1 天前
⚛️ 深入学习 React Fiber 架构的思路分析
前端·react.js·架构
大大大大物~1 天前
JVM 之 内存溢出实战【OOM? SOF? 哪些区域会溢出?堆、虚拟机栈、元空间、直接内存溢出时各自的特点?以及什么情况会导致他们溢出?并模拟溢出】
java·jvm·oom·sof
气π1 天前
【流程】——若依项目前后端打包发布到服务器
运维·服务器·oracle