Vue之VueX知识探索(一起了解关于VueX的新世界)

news2024/11/17 12:55:37

目录

前言

一、VueX简介

1. 什么是VueX

2. VueX的作用及重要性

3. VueX的应用场景

二、VueX的使用准备工作

1. 下载安装VueX

2. vuex获取值以及改变值

2.1 创建所需示例

 2.2 将创建好的.vue文件页面显示

 2.3 创建VueX的相关文件

 2.4 配置VueX四个js文件

 2.5 加载到vue示例中

 三、VueX获取值及改变值

3.1 获取值

 work1.vue

 state.js

方式一:(不推荐)

 方式二:

3.2 改变值

work1.vue

mutation.js

效果

3.3 跨页面传值

work2.vue

效果

四、VueX之异步请求

1. 什么是异步请求

4.2 异步请求与同步请求的区别

 4.3 异步请求与同步请求的好处

4.4  异步请求与同步请求的使用情况

4.5 案例演示

模拟一:

work1.vue

actions.js

效果

模拟二:异步请求后台

work1.vue

actions.js

 请求路径

 直接运行结果

 优化后的请求后台

work1.vue

actions.js

效果


前言

        在上一期以及之前几期的博客中我们都是分享了有关ElementUI在Vue中的一些知识点运用以及案例演示,在往前还分享了像组件通信之类的Vue知识。今天我给老铁们带来的是是与组件通信有关,今天分享的是VueX。

一、VueX简介

1. 什么是VueX

        VueX 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以可预测的方式进行状态的变更。VueX 基于 Flux 和 Redux 架构的思想,通过单向数据流的方式来管理应用中的状态。

        在 VueX 中,状态被存储在一个被称为「store」的容器中,组件可以通过提交(commit)一些特定的「mutations」来改变这个状态。这种改变是同步的,并且由 VueX 确保所有的状态变更都是可跟踪的。此外,VueX 也支持异步操作,通过触发(dispatch)一些特定的「actions」来处理异步的逻辑。最后,通过使用「getters」,组件可以从 store 中获取状态,以便在应用中使用。

2. VueX的作用及重要性


作用及重要性体现在一下几个方面:

  1. 状态集中管理:VueX 提供了一个全局的状态容器(store),将应用程序的状态集中管理起来。通过单一的状态树,可以追踪和调试整个应用程序的状态变化。这样可以避免状态分散、逻辑混乱的问题,提高开发效率和可维护性。

  2. 组件间通信和共享状态:在大型应用中,多个组件可能需要共享相同的状态数据。VueX 提供了一种统一的状态管理机制,允许多个组件直接访问和修改状态,取代了传统的组件间的事件传递、属性传递等繁琐的通信方式。这样可以简化组件之间的数据传递,提高组件的可复用性。

  3. 异步操作和状态管理:在实际应用中,很多情况下需要处理异步的逻辑,例如发送网络请求、异步数据获取等。VueX 提供了「actions」来处理异步操作,保证异步操作和状态的一致性。这使得应用程序中的异步逻辑更可控、更易于管理。

  4. 易于调试和追踪:VueX 提供了开发者工具集成,可以轻松地调试和追踪状态的变化。通过开发者工具的支持,可以查看每个状态的变化、时间旅行回放等,更方便地定位问题和进行性能优化。

        总之,VueX 的作用和重要性在于提供了一种集中、可预测和可维护的方式来管理和共享应用程序的状态。它解决了多个组件之间通信和状态共享的问题,简化了应用的复杂性,提高了开发效率和可维护性。在大型应用程序中,使用 VueX 可以更好地组织和管理状态,提供更好的用户体验和开发体验。

3. VueX的应用场景

  1. 大型应用程序:当应用程序规模较大,有很多组件需要共享状态或进行复杂的状态管理时,VueX 可以帮助更好地组织和管理状态,简化组件间的通信和数据传递。

  2. 跨组件通信:当多个组件需要共享相同的状态数据或进行信息传递时,VueX 提供了一个集中的状态存储,可以让这些组件直接访问和修改状态,取代传统的事件传递或属性传递的方式。

  3. 异步操作和请求管理:当应用程序需要处理大量的异步操作、网络请求或数据获取时,VueX 提供了「actions」来处理异步逻辑,保证异步操作和状态的一致性,并提供了便捷的调试工具。

  4. 路由状态管理:当应用程序有复杂的路由结构时,需要存储和管理当前路由状态、页面状态等信息时,VueX 可以方便地管理和同步这些信息,使路由状态管理更加简单和可控。

  5. 全局状态管理:当应用程序需要维护一些全局的状态,例如用户登录信息、主题样式等,VueX 提供了一个统一的状态容器,方便在不同组件间进行状态的读写和更新。

注意:

        使用 VueX 也需要根据实际情况进行评估。在简单的小型应用中,使用 VueX 可能会带来额外的复杂性。因此,在选择使用 VueX 时,需要根据具体的项目需求、规模和复杂度来决策。

        

二、VueX的使用准备工作

1. 下载安装VueX

安装指令:

npm install vuex -S   ===》node.js10

npm i -S vuex@3.6.2 ===>node.js18

在项目目录下的终端窗口中输入即可

2. vuex获取值以及改变值

2.1 创建所需示例

        在views文件中创建VueX文件由于存放示例,在VueX文件中创建两个.vue文件模拟获取值及改变值,以及配置其路由关系。

 

 2.2 将创建好的.vue文件页面显示

在左侧树形菜单中添加

 2.3 创建VueX的相关文件

        在src的文件目录下创建一个store文件夹,在文件中创建四个文件分别是state.js、index.js、mutations.js、actions.js、getters.js四个文件

 

 2.4 配置VueX四个js文件

在store中index.js中配置

import Vue from 'vue'
import Vuex from 'vuex'
import state from './state'
import getters from './getters'
import actions from './actions'
import mutations from './mutations'
Vue.use(Vuex)
const store = new Vuex.Store({
 	state,
 	getters,
 	actions,
 	mutations
 })

 export default store

 2.5 加载到vue示例中

 三、VueX获取值及改变值

3.1 获取值

 work1.vue
<template>
  <div style="padding: 60px;">
    <h1>君易第一页面</h1>
    <p>改变state.js文件中的值</p>
    <button @click="fun1">获取</button>
    <button @click="fun2">改变</button>
  </div>
</template>

<script>
  export default{
    data(){
      return{
        msg:'君易01'
      }
    },methods:{
      fun1(){
        // 方式一
     let eduName =this.$store.state.eduName;
       alert(eduName);
      },
      fun2(){

      }
    }
  }
</script>

<style>
</style>
 state.js
export default{//定义变量
  eduName:'君易'
}
方式一:(不推荐)

 this.$store-->store/index.js

 方式二:

  let eduName =this.$store.state.eduName;

 

3.2 改变值

work1.vue
<template>
  <div style="padding: 60px;">
    <h1>君易第一页面</h1>
    <p>改变state.js文件中的值</p>
    输入改变后的值 &nbsp;<input v-model="msg" />
    <button @click="fun1">获取</button>
    <button @click="fun2">改变</button>
  </div>
</template>

<script>
  export default{
    data(){
      return{
        msg:'君易01'
      }
    },methods:{
      fun1(){
        // 方式一
     let eduName =this.$store.state.eduName;
       alert(eduName);
      },
      fun2(){
          this.$store.commit('setEduName',{
            eduName:this.msg
          })
      }
    }
  }
</script>

<style>
</style>
mutation.js
export default{
  setEduName:(state,payload)=>{//设置变量
    //代指state.js文件导出的对象
    // payload就是传递的参数

    state.eduName=payload.eduName;
  }
}
效果

3.3 跨页面传值

work2.vue
<template>
  <div>
    <h1>君易第二页面</h1>
    {{eduName}}
  </div>
</template>

<script>
  export default {
    data() {
      return {
        msg: '君易02'
      }
    },
    computed: {
      eduName() {
        return this.$store.state.eduName;
      }
    }

  }
</script>

<style>
</style>
效果

四、VueX之异步请求

1. 什么是异步请求

        在 Vue.js 应用程序中,Vuex 是一个用于应用程序状态管理的官方库。异步请求是指在应用程序中进行异步操作,如获取数据或向服务器发送数据并等待响应。在 Vuex 中,你可以使用异步 action 来处理异步请求。

        在 Vuex 中,可以定义 actions,其中可以包含异步操作。这些 actions 被调用时可以触发对应的 mutations 来修改状态。通常,在 actions 中执行异步操作,比如发送网络请求和处理响应。

        在异步操作中,可以使用异步的方式发送网络请求,如使用 Axios 或 Fetch API 这样的库。在请求成功或失败后,可以根据响应的结果触发对应的 mutations 更新状态。

通过使用异步 action,Vuex 管理应用程序状态的同时,还能处理复杂的异步操作,如加载数据、提交表单或与后端API进行通信。这样可以在状态管理中保持一致性,并且更好地追踪和管理数据流。

        总之,Vuex 的异步请求指的是在应用程序中使用异步 action 处理异步操作,如发送网络请求并处理响应。

4.2 异步请求与同步请求的区别

在VueX中,同步请求和异步请求的区别主要体现在数据处理和更新状态的方式上。

  1. 同步请求:在同步请求中,当actions接收到异步操作时,它不会直接进行状态更新。而是需要通过mutations来改变状态。也就是说,同步请求需要通过mutation的commit方法来提交给store,然后store会调用对应的同步mutations方法来修改state中的数据。
  2. 异步请求:在异步请求中,当actions接收到异步操作时,它会通过提交mutation给store,并在mutations中处理异步操作。这个过程中,mutations会使用异步函数来处理异步请求,从而使得state中的数据能够在异步请求完成后自动更新。

总之,在VueX中,同步请求和异步请求的主要区别在于如何处理和更新状态。同步请求需要提交mutation来更新状态,而异步请求则可以使用异步函数来处理异步操作并在完成后自动更新状态。

 4.3 异步请求与同步请求的好处

VueX中同步请求和异步请求各有其好处,具体表现如下:

  1. 同步请求:可以按顺序执行代码,不会出现还没执行完就执行下一句代码的混乱情况。同时,同步流程对结果处理通常更为简单,可以就近处理。还有,同步流程对结果的处理始终和前文保持在一个上下文内。另外,同步流程可以很容易捕获、处理异常。
  2. 异步请求:由于异步请求是立即给调用方返回初步的结果,所以具有能够立即响应用户操作的优势。其次,异步请求可以延迟给调用方最终的结果数据,在此期间可以做更多额外的工作,例如结果记录等等。另外,异步流程在执行的过程中,可以释放占用的线程等资源,避免阻塞,等到结果产生再重新获取线程处理。最后,异步流程可以等多次调用的结果出来后,再统一返回一次结果集合,提高响应效率。

综上,VueX中的同步请求和异步请求各有其优点,分别适用于不同的应用场景,需要根据具体需求进行选择和搭配使用。

4.4  异步请求与同步请求的使用情况

        在编程中,选择使用异步请求还是同步请求主要取决于具体的应用场景和需求。

        一般来说,对于那些需要处理耗时操作,如网络请求、文件IO等场景,通常更适合使用异步请求。因为这些操作需要花费一定的时间,如果使用同步请求,程序会一直等待这些操作完成,而无法继续执行其他任务,导致程序效率低下。而异步请求可以让程序在等待这些操作完成的同时,继续执行其他任务,从而提高了程序的效率。

        另一方面,对于那些需要按照一定顺序执行,且不需要等待其他操作的场景,通常更适合使用同步请求。例如,在执行一系列的计算操作时,使用同步请求可以保证这些操作按照预期的顺序执行,不会出现混乱或错误的情况。

        需要注意的是,选择使用异步请求还是同步请求并不是绝对的,需要根据具体的情况进行综合考虑。例如,在某些情况下,使用异步请求可能会导致程序变得复杂难以维护,此时可能需要考虑使用同步请求或者其他的解决方案。

        总之,在编程中,选择使用异步请求还是同步请求需要根据具体的应用场景和需求进行权衡,选择最适合的方案。

4.5 案例演示

模拟一:

work1.vue
<template>
  <div style="padding: 60px;">
    <h1>君易第一页面</h1>
    <p>改变state.js文件中的值</p>
    输入改变后的值 &nbsp;<input v-model="msg" />
    <button @click="fun1">获取</button>
    <button @click="fun2">改变</button>
    <button @click="fun3">改变state的值</button>
    <p>获取state的值</p>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        msg: '君易01'
      }
    },
    methods: {
      fun1() {
        // 方式一
        let eduName = this.$store.state.eduName;
        alert(eduName);
      },
      fun2() {
        this.$store.commit('setEduName', {
          eduName: this.msg
        })
      },
      fun3() {
        this.$store.dispatch('setEduName', {
          eduName: this.msg
        })
      }
    }
  }
</script>

<style>
</style>
actions.js
export default{
  setEduNameAsync:(context,payload)=>{//设置变量
  setTimeout(function(){
    context.commit('setEduName',payload);
  },10000);
  }
}
效果

模拟二:异步请求后台

work1.vue
<template>
  <div style="padding: 60px;">
    <h1>君易第一页面</h1>
    <p>改变state.js文件中的值</p>
    输入改变后的值 &nbsp;<input v-model="msg" />
    <button @click="fun1">获取</button>
    <button @click="fun2">改变</button>
    <p>获取state的值</p>
    <button @click="fun3">改变state的值</button>
    <button @click="fun4">模拟后台请求异步请求</button>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        msg: '君易01'
      }
    },
    methods: {
      fun1() {
        // 方式一
        let eduName = this.$store.state.eduName;
        alert(eduName);
      },
      fun2() {
        this.$store.commit('setEduName', {
          eduName: this.msg
        })
      },
      fun3() {
        this.$store.dispatch('setEduNameAsync', {
          eduName: this.msg
        })
      },
      fun4() {
        s this.$store.dispatch('setEduNameAjax', {
          eduName: this.msg
        })
      }
    }
  }
</script>

<style>
</style>
actions.js
export default {
  setEduNameAsync: (context, payload) => { //设置变量
    setTimeout(function() {
      context.commit('setEduName', payload);
    }, 10000);
  },
  setEduNameAjax: (context, payload) => { //设置变量
    let url = this.axios.urls.VUEX_AJAX;
    let params = {
    }
      resturantName: payload.eduName
    this.axios.post(url, params).then(r => {
      // 打印
      console.log(r);
    }).catch(e => {});
  }
}
 请求路径

 直接运行结果

这是this关键字在vue实例转到vuex中失效,将this作为参数传过去即可。

 优化后的请求后台

work1.vue
<template>
  <div style="padding: 60px;">
    <h1>君易第一页面</h1>
    <p>改变state.js文件中的值</p>
    输入改变后的值 &nbsp;<input v-model="msg" />
    <button @click="fun1">获取</button>
    <button @click="fun2">改变</button>
    <p>获取state的值</p>
    <button @click="fun3">改变state的值</button>
    <button @click="fun4">模拟后台请求异步请求</button>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        msg: '君易01'
      }
    },
    methods: {
      fun1() {
        // 方式一
        let eduName = this.$store.state.eduName;
        alert(eduName);
      },
      fun2() {
        this.$store.commit('setEduName', {
          eduName: this.msg
        })
      },
      fun3() {
        this.$store.dispatch('setEduNameAsync', {
          eduName: this.msg
        })
      },
      fun4() {
         this.$store.dispatch('setEduNameAjax', {
          eduName: this.msg,
          _this:this
        })
      }
    }
  }
</script>

<style>
</style>
actions.js
export default {
  setEduNameAsync: (context, payload) => { //设置变量
    setTimeout(function() {
      context.commit('setEduName', payload);
    }, 10000);
  },
  setEduNameAjax: (context, payload) => { //设置变量
    let _this = payload._this;
    let url = _this.axios.urls.VUEX_AJAX;
    let params = {
       resturantName: payload.eduName
    }
    _this.axios.post(url, params).then(r => {
      // 打印
      console.log(r);
    }).catch(e => {});
  }
}
效果

注意:

如果是使用Dbug启动服务器的话,发送异步请求会发生失效的结果,不使用Dbug启动就不会出现。因为异步请求会失效有时间限制。

 本期分享到此结束,感谢支持。三连加关注哦!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1083136.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网络架构介绍

1 网络 7 层架构 7 层模型主要包括&#xff1a; 1. 物理层&#xff1a;主要定义物理设备标准&#xff0c;如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流&#xff08;就是由 1、0 转化为电流强弱来进行传输,到达目的地后在转化为1、0…

简述电子设计中的EMC、EMI、ESD

简述电子设计中的EMC、EMI、ESD ESD EMI EMC ESD、EMI、EMC 设计是电子工程师在设计中遇到最常见的难题&#xff0c;电磁兼容性&#xff08;EMC&#xff09;是指设备或系统在其电磁环境中符合要求运行并不对其环境中的任何设备产生无法忍受的电磁干扰的能力。 因此&#xff0…

【2023年11月第四版教材】第24章《法律法规与标准规范》(合集篇)

第24章《法律法规与标准规范》(合集篇&#xff09; 1 民法典&#xff08;合同编&#xff09;2 招标投标法2.1 关于时间的总结2.2 内容 3 政府采购法4 专利法5 著作权法6 商标法7 网络安全法8 数据安全法 1 民法典&#xff08;合同编&#xff09; 1、要约是希望和他人订立合同的…

LLM - 旋转位置编码 RoPE 代码详解

目录 一.引言 二.RoPE 理论 1.RoPE 矩阵形式 2.RoPE 图例形式 3.RoPE 实践分析 三.RoPE 代码分析 1.源码获取 2.源码分析 3.rotary_emb 3.1 __init__ 3.2 forward 4.apply_rotary_pos_emb 4.1 rotate_half 4.2 apply_rotary_pos_emb 四.RoPE 代码实现 1.Q/K/V …

苹果ios开发者ipa文件包内测人数签名真机数量满了应该怎么做?

苹果ios开发者ipa文件包内测人数签名真机数量满了应该怎么做&#xff1f; 有人总是问我开发者的设备满了怎么做才可以让设备增加&#xff1f;或者我要怎么做才能让员工的设备都可以安装&#xff0c;那么首先我们要做到的就是要知道我们的开发者都是拥有多少内测设备&#xff1f…

放大器的输入、输出电压范围的理解

问题电路 由于运放SGM8295不是轨到轨的电路&#xff0c;导致U29.1输出电压只有当输入到一定门限的时候才会有输出。 上图表示输入电压工作范围为如上&#xff0c;在此以外的不能正常工作。 一篇很好的运放的输入/输出文章介绍 https://zhuanlan.zhihu.com/p/351740051?utm_id0…

【Java学习之道】异常的处理方式

引言 今天我们将聚焦于异常处理&#xff0c;这是每一个Java程序员都应该掌握的核心技能之一。通过学习这些内容&#xff0c;你将能够更好地应对程序中的意外情况&#xff0c;提高程序的健壮性和可靠性。 一、异常的处理方式 在Java中&#xff0c;异常处理主要通过使用try-ca…

后厂村路灯在线签名网站,在线签名工具,IPA在线签名

IPA在线签名工具网站&#xff0c;在线实现IPA包签名 案例网站&#xff1a;在线签名 - 后厂村路灯https://sign.vx365.vip/ 用户可以自定义签名网站样式。 用户可以独立部署到自己服务器&#xff0c;使用自己的域名。 用户可以使用自己服务器&#xff0c;加快签名速度&#xf…

YB4618 具有充电前端过电压和过温保护功能,低压差充电前端 OVP 保护开关IC

YB4618 低压差充电前端 OVP 保护开关 概述: YB4618 具有充电前端过电压和过温保护功能。支持 3V 到 40V 的宽输入电压工作范围。过压保护阈值可以外部设置或采用内部默认设置。超快的过压保护响应速度能够确保后级电路的安全。集成了超低导通阻抗的 nFET 开关&#xff0c;确…

Explain执行计划字段解释说明---type字段说明(02)

type显示访问类型详解 &#xff08;1&#xff09;system 表只有一行记录&#xff08;等于系统表&#xff09;&#xff0c;这是const类型的特列&#xff0c;平时不会出现&#xff0c;这个也可以忽略不计。 &#xff08;2&#xff09;const 表示通过索引一次就找到了,const用…

提升战斗力!吃鸡行家分享顶级游戏干货,助你轻松拿下绝地求生

作为吃鸡行家&#xff0c;我们都知道&#xff0c;在绝地求生中提高战斗力至关重要。今天我来分享一些独特的干货&#xff0c;帮助你成为顶级的吃鸡玩家&#xff0c;并分享一些方便吃鸡作图、装备皮肤库存展示和查询的技巧。 首先&#xff0c;让我们来谈谈绝地求生作图工具推荐。…

【Java学习之道】异常的概念与分类

引言 异常处理是Java编程中重要的一部分&#xff0c;它可以让我们更好地处理程序中可能出现的错误和异常情况。同时&#xff0c;Java也提供了强大的输入/输出流功能&#xff0c;让我们可以轻松地读取和写入数据。这一章&#xff0c;我们就来探讨这两个话题&#xff0c;让你的J…

HT for Web 风格属性手册教程 | 图扑软件

图扑软件明星产品 HT for Web 是一套纯国产化独立自主研发的 2D 和 3D 图形界面可视化引擎。HT for Web&#xff08;以下简称 HT&#xff09;图元的样式由其 Style 属性控制&#xff0c;并且不同类型图元的 Style 属性各不相同。为了方便查询和理解图元的 Style 属性&#xff0…

Docker-compos

Docker-compose 简介 Docker-Compose项目是基于Python开发的Docker官方开源项目&#xff0c;负责实现对Docker容器集群的快速编排。 Docker-Compose将所管理的容器分为三层&#xff0c;分别是 工程&#xff08;project&#xff09;&#xff0c;服务&#xff08;service&#…

大模型的超级“外脑”——向量数据库解决大模型的三大挑战

随着AI大模型产品及应用呈现爆发式增长,新的AI时代已经到来。向量数据库可与大语言模型配合使用,解决大模型落地过程中的痛点,已成为企业数据处理和应用大模型的必选项。在近日举行的华为全联接大会2023期间,华为云正式发布GaussDB向量数据库。GaussDB向量数据库基于GaussD…

MySQL数据库——SQL优化(2)-order by 优化、group by 优化

目录 order by 优化 概述 测试 优化原则 group by 优化 测试 优化原则 order by 优化 概述 MySQL的排序&#xff0c;有两种方式&#xff1a; Using filesort : 通过表的索引或全表扫描&#xff0c;读取满足条件的数据行&#xff0c;然后在排序缓冲区sortbuffer中完成排…

提升吃鸡战斗力,分享顶级作战干货!

大家好&#xff01;作为一名吃鸡玩家&#xff0c;你是否也希望提高自己的游戏战斗力&#xff1f;在这里&#xff0c;我将为大家分享一些顶级游戏作战干货&#xff0c;以及方便吃鸡作图和查询装备皮肤库存的实用工具。 首先&#xff0c;让我们提到绝地求生作图工具推荐。通过使用…

提升吃鸡战斗力,分享顶级游戏干货,一站式解决你的游戏需求!

大家好&#xff01;作为一名吃鸡玩家&#xff0c;你是否希望提升自己的游戏战斗力&#xff0c;分享顶级的游戏作战干货&#xff0c;同时方便进行吃鸡作图&#xff0c;查询装备皮肤库存&#xff0c;还能查防止被骗游戏账号黑名单&#xff0c;查询失信人及VAC封禁情况等。今天我将…

【洛谷算法题】P1421-小玉买文具【入门1顺序结构】

&#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P1421-小玉买文具【入门1顺序结构】&#x1f30f;题目描述&#x1f30f;输入格式…

Apache Doris (四十): BACKUP数据备份

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频 目录