iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > node.js >Vue的provide/inject如何用
  • 898
分享到

Vue的provide/inject如何用

2024-04-02 19:04:59 898人浏览 安东尼
摘要

这篇文章主要讲解了“Vue的provide/inject如何用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vue的provide/inject如何用”吧!

这篇文章主要讲解了“Vue的provide/inject如何用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vue的provide/inject如何用”吧!

简单的可以把provide/inject对比为React的context,都是为了解决跨层级传递属性的不方便而设立的,跟早期的context一样,一开始provide/inject机制也没有载入官方文档,现在虽然已经写了,但仍是语焉不详,这就是我写本文的目的。

Hello World

看一个最简单的例子,从祖辈组件中拿到传入下来的颜色值

UI界面如上,很简单,祖辈组件还提供了一个单选来改变。

<template>

  <div>

    <label for="red">

      红色

      <input type="radio" id="red" value="red" v-model="color" />

    </label>

    <br />

    <label for="greed">

      绿色

      <input type="radio" id="green" value="green" v-model="color" />

    </label>

    <slot />

  </div>

</template>

先看provide,它可以是一个对象,比如

provide: {

  color: "green"

}

在孙子组件中可以顺利的取到这个值,但要注意的是这样子的写法是不能返回Vue实例的响应式数据的,当尝试改为

provide: {

  color: this.color, //访问不到Vue实例

}

发生错误,提示是Uncaught TypeError: Cannot read property 'color' of undefined 。

一般还是用函数的方式,返回一个传入的对象

provide() {

  return {

    color: this.color,

  };

}

但是color不是响应式的,就是说如果我在祖辈组件里选择另外一个颜色,在孙子组件里是拿不到更新后的值的,关于非响应式这一点在下一节详细展开。

inject用来指定一个数组或者一个对象,数组的话就放provide里字段的名称,而对象的话可以指定

当前实例中的字段名

对应provide里的字段名

默认值或者返回默认值的函数

const Child = {

  inject: {

    foo: {

      from: 'bar',

      default: () => [1, 2, 3]

    }

  }

}

不是响应式

这个跟React的context是不同的,React没有响应式机制,一旦改变属性后默认会引发层层的渲染,开发者自己通过shouldComponentUpdate来优化

官方文档上明确的说了

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

第一种解决方案是把值转为函数,记得要用箭头函数,不然不能正确获取this

provide() {

  return {

    color: () => {

      return this.color;

    },

  };

}

然后使用时就要变成了函数的调用

<template>

  <div :style="{'color':color()}">传下来的颜色{{color()}}</div>

</template>

这样子就带来一个很明显的缺点就是由于不是响应式,这个函数将会被调用多次,比如上面模板里有两个color(),可以在函数里打个断点,会发现进来两次。

更好一些的解决方案是把provide所在的Vue实例给传递下去,再来改造一下

provide() {

  return {

    color: this,

  };

}

在孙组件里获得的其实是实例了,所以要多取一层属性

<template>

  <div :style="{'color':color.color}">传下来的颜色{{color.color}}</div>

</template>

可以看到很多UI组件库就是通过这个方式来传递属性的,因为有可能在不确定层级的子组件里要获得祖组件里的值。

感谢各位的阅读,以上就是“Vue的provide/inject如何用”的内容了,经过本文的学习后,相信大家对Vue的provide/inject如何用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: Vue的provide/inject如何用

本文链接: https://www.lsjlt.com/news/92043.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Vue的provide/inject如何用
    这篇文章主要讲解了“Vue的provide/inject如何用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vue的provide/inject如何用”吧!...
    99+
    2024-04-02
  • Vue 中 provide和inject的使用
    目录前言Vue中如何使用provide和inject在 Vue 中使用注入访问父数据前言 在Vue中我们可以很方便的通过父组件往子组件传递属性,Props是我们将数据传递到子组件的主...
    99+
    2022-11-13
    Vue 中 provide的使用 Vue 中inject的使用
  • 详解在Vue中如何使用provide与inject
    目录provide()函数inject()函数总结在vue2.0里面provide与inject是以选项式(配置)API的方式在组件中进行使用的,解决的是跨组件(祖孙)间通信的一种方...
    99+
    2023-03-20
    Vue使用provide inject Vue provide inject
  • Vue中的provide和inject怎么使用
    今天小编给大家分享一下Vue中的provide和inject怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。在vue2...
    99+
    2023-07-06
  • Vue中怎么使用provide与inject
    本篇内容介绍了“Vue中怎么使用provide与inject”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在vue2.0里面provide与...
    99+
    2023-07-05
  • 应用provide与inject刷新Vue页面方法
    目录方法1:直接调用函数方法2:采用provide / inject(静刷新)优势比较方法1:直接调用函数 将整个页面重载, 以下两种都可以 1.window.location.r...
    99+
    2024-04-02
  • Vue3的provide/inject怎么使用
    本文小编为大家详细介绍“Vue3的provide/inject怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Vue3的provide/inject怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思...
    99+
    2024-04-02
  • Vue3中的provide、inject的用法
    目录一. 场景再现二. 传递 Props三. provide 和 inject四. provide 的进阶用法五. 源码六. 思考题前言: 在前端项目中牵扯的最多的莫过于组件之间的传...
    99+
    2023-03-06
    Vue3 provide inject使用 Vue3 provide inject
  • Vue3中的provide、inject怎么使用
    一. 场景再现先别着急考虑标题这个 api 的含义。在这里我先动手写一个比较常见的场景。所对应的组件内部代码比较简单,这里我就不展示了,逻辑上就是 这三个组件层层引用。所对应的页面效果如下:如上图,这是一个在项目中很常见的一个场景,三层嵌套...
    99+
    2023-05-14
    Vue3 provide inject
  • vue3中provide和inject的使用
    1.provide 和 inject 的讲解 provide和inject可以实现嵌套组件之间进行传递数据。 这两个函数都是在setup函数中使用的。 父级组件使用provide向...
    99+
    2024-04-02
  • 一文聊聊Vue中provide和inject的使用方法
    Vue中如何使用provide与inject?下面本篇文章就来给大家介绍一下Vue中provide和inject的使用方法,希望对大家有所帮助!在vue2.0里面provide与inject是以选项式(配置)API的方式在组件中进行使用的,...
    99+
    2023-05-14
    Vue javascript
  • Vue中provide、inject详解以及使用教程
    目录Vue中 常见的组件通信方式可分为三类1. provide / inject 简介2. provide / inject 使用方法3. 总结总结传送门:Vue中 子组件向父组件传...
    99+
    2022-11-16
    vue中的provide/inject vue3 provide inject vue inject provide
  • vue3中provide和inject怎么用
    这篇文章将为大家详细讲解有关vue3中provide和inject怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。provide 和 inject 的讲解provide和inject可以实现嵌套组件之...
    99+
    2023-06-20
  • vue3中provide和inject怎么使用
    本篇内容主要讲解“vue3中provide和inject怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue3中provide和inject怎么使用”吧!前言:在父子组件传递数据时,通常...
    99+
    2023-06-21
  • vue高级组件之provide与inject使用及说明
    目录vue provide与inject使用及说明vue中不同组件通信方式如下缺点vue3中父子组件传值(provide/inject)具体操作总结vue provide与injec...
    99+
    2023-05-17
    vue高级组件 vue provide vue inject
  • 解析vue的provide和inject使用方法及其原理
    首先来谈谈我们为什么要使用provide/inject呢?对于爷爷和孙子组件之间,甚至太爷爷组件与孙子组件通信我们用vuex不就ok了。 那事实的确如此,但是,请听我说但是,有时候你...
    99+
    2024-04-02
  • vue2如何实现provide inject传递响应式
    这篇文章将为大家详细讲解有关vue2如何实现provide inject传递响应式,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1. vue2 中的常规写法// 父级组件提供 '...
    99+
    2023-06-15
  • vue2.0/3.0中provide和inject的用法示例
    目录1、provide/inject有什么用?2、provide/inject使用方式具体用法:vue3.0用法总结1、provide/inject有什么用? 常用的父子组件通信方...
    99+
    2024-04-02
  • 怎么用 Provide 和 Inject 做Vue3插件
    这篇文章主要介绍“怎么用 Provide 和 Inject 做Vue3插件”,在日常操作中,相信很多人在怎么用 Provide 和 Inject 做Vue3插件问题上存在疑惑,小编查阅了各式资料,整理出简单...
    99+
    2024-04-02
  • vue中provide inject的响应式监听解决方案
    目录provide inject的响应式监听解决vue监听赋值及provide与injectprovide inject的响应式监听解决 提示:provide 和 inject 绑定...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作