• VueX


    目录

    一、Vuex的核心组成

     对于我们为什么要学习Vuex?

    二、Vuex版本问题及store.js的使用

    1、加载以来 npm install vuex -s下载Vuex最新版本的依赖

    2、导入vuex的核心4个组件,然后通过index.js加载进来

    3、将vuex对应的index.js文件挂载到main.js的Vue实例中

    4、测试Vuex的存储变量的功能

    三、Vuex中的存值、取值获取变量值

    四、Vuex中的异步同步操作

    五、Vuex的后台交互


    一、Vuex的核心组成

            对于我们为什么要学习Vuex?

    Vuex很好的解决前端组件传参的问题,针对当前项目所有的变量进行统一管理,可以理解为前端的数据库

     已知的传参的方式有两种:

    1、子传父 $emit     父传子 props

    2、总线

    相比于总线的优点在于,能够将整个项目的变量进行统一管理

    图解:

    下面是通过图解的方式介绍Vuex的四个组件

     官方图解:

    核心组件Vuex:


        state.js 存储变量
            获取值 this.$store.state.变量值


        Getters.js 获取变量值
            获取值 this.$store.getters.变量的get方法


        mutations.js 改变变量值(同步)
            改变值 this.$store.commit('同步方法')


        actions.js 改变变量值(异步)
            改变值 this.$store.dispatch(‘异步的方法’)

        Vuex中默认情况下是不允许使用vue实例,想要请求后台接口,必须将vue实例当初参数从组件那一方传递过来

     

    二、Vuex版本问题及store.js的使用

    1、加载以来 npm install vuex -s下载Vuex最新版本的依赖

    (在这里小编用npm i -S vuex@3.6.2版本的,版本不同的话效果出不来)

     运行此命令,会进行jar包的下载

    在Package.js里会出现所下载Vuex版本

     

    2、导入vuex的核心4个组件,然后通过index.js加载进来


    3、将vuex对应的index.js文件挂载到main.js的Vue实例中


    4、测试Vuex的存储变量的功能

     state.js

    1. export default{
    2. resName:'小計餐館'
    3. }

     Vuexpage1:

    1. <template>
    2. <div>
    3. <p>欢迎来到{{msg}}p>
    4. div>
    5. template>
    6. <script>
    7. export default {
    8. name: 'VuexPage1',
    9. data () {
    10. return {
    11. }
    12. },
    13. computed:{
    14. msg(){
    15. // 从vuex的state文件中获取值
    16. return this.$store.state.resName;
    17. }
    18. }
    19. }
    20. script>
    21. <style scoped>
    22. style>

     router/index.js

    1. import Vue from 'vue'
    2. import Router from 'vue-router'
    3. import HelloWorld from "../components/HelloWorld";
    4. import AppMain from "../components/AppMain";
    5. import LeftNav from "../components/LeftNav";
    6. import TopNav from "../components/TopNav";
    7. import Login from "../views/Login";
    8. import Reg from "../views/Reg";
    9. import Articles from "../views/sys/Articles";
    10. import VuexPage1 from "../views/sys/VuexPage1";
    11. Vue.use(Router)
    12. export default new Router({
    13. routes: [
    14. {
    15. path: '/',
    16. name: 'Login',
    17. component: Login
    18. },
    19. {
    20. path: '/Login',
    21. name: 'Login',
    22. component: Login
    23. },
    24. {
    25. path: '/Reg',
    26. name: 'Reg',
    27. component: Reg
    28. },
    29. {
    30. path: '/AppMain',
    31. name: 'AppMain',
    32. component: AppMain,
    33. children:[
    34. {
    35. path: '/LeftNav',
    36. name: 'LeftNav',
    37. component: LeftNav
    38. },
    39. {
    40. path: '/TopNav',
    41. name: 'TopNav',
    42. component: TopNav
    43. },
    44. {
    45. path: '/sys/Articles',
    46. name: 'Articles',
    47. component: Articles
    48. },
    49. {
    50. path: '/sys/VuexPage1',
    51. name: 'VuexPage1',
    52. component: VuexPage1
    53. }
    54. ]
    55. }
    56. ]
    57. })

     

    三、Vuex中的存值、取值获取变量值

    VuexPage2:

    1. <template>
    2. <div>
    3. <p>页面2:欢迎来到{{msg}}p>
    4. div>
    5. template>
    6. <script>
    7. export default {
    8. name: 'VuexPage2',
    9. data () {
    10. return {
    11. }
    12. },
    13. computed:{
    14. msg(){
    15. // 从vuex的state文件中获取值
    16. // return this.$store.state.resName;——>不推荐,不安全
    17. // 通过getters.js文件获取state.js中定义的变量值
    18. return this.$store.getters.getResName;
    19. }
    20. }
    21. }
    22. script>
    23. <style scoped>
    24. style>

    Mutations.js(存值)

    1. export default {
    2. setResName:(state,payload)=>{
    3. // state对象就对应了state.js中的对象
    4. // payload载荷 对应的 传递的 json对象参数{name:zs,age:24}
    5. state.resName=payload.resName;
    6. }
    7. }

     getters.js(取值)

    1. export default {
    2. getResName:(state)=>{
    3. return state.resName;
    4. }
    5. }

    注意:我们可以看到内容显示的是欢迎来到小计餐馆

     

    点击之后变成KFC

     

     

     Vuexpage2界面也获取到了VuexPage1的变量值

    四、Vuex中的异步同步操作

    Vuexpage1:

    1. <template>
    2. <div>
    3. <p>頁面一:歡迎來到{{msg}}p>
    4. <button @click="buy">盤下這個店面button>
    5. <button @click="buyAsync">最終的店長button>
    6. div>
    7. template>
    8. <script>
    9. export default {
    10. name: 'VuexPage1',
    11. data () {
    12. return {
    13. }
    14. },
    15. methods:{
    16. buy(){
    17. // 通過commit方法調用mutations.js文件中定義好的方法
    18. this.$store.commit("setResName",{
    19. resName:'KFC'
    20. });
    21. },
    22. buyAsync(){
    23. this.$store.dispatch("setResNameAsync",{
    24. resName:'麥當勞',
    25. _this:this
    26. });
    27. }
    28. },
    29. computed:{
    30. // 從VUex的 state文件中獲取值
    31. msg(){
    32. // return this.$store.state.resName; 不推薦 不安全
    33. // 通過getter.js文件獲取 state.js中定義的變量值
    34. return this.$store.getters.getResName;
    35. }
    36. }
    37. }
    38. script>
    39. <style>
    40. style>

    actions.js:

    1. export default{
    2. setResNameAsync:(context,payload)=>{
    3. // 異步修改值 多件事情一起幹 載異步方法中調用了同步方法
    4. // context:Vuex上下文,相當於this.$store
    5. // 此代碼三秒後執行
    6. setTimeout(function(){
    7. context.commit("setResName",payload)
    8. },3000)
    9. }
    10. }

     

     

    先点击第二个按钮,再点击第一个按钮,时隔3秒

     

     

       Action类似于 mutation,不同在于:

       1.Action提交的是mutation,而不是直接变更状态

       2.Action可以包含任意异步操作

       3.Action的回调函数接收一个 context 上下文参数,注意,这个参数可不一般,它与 store 实例有着相同的方法和属性

     

    五、Vuex的后台交互

    action.js

    1. export default{
    2. setResNameAsync:(context,payload)=>{
    3. // 異步修改值 多件事情一起幹 載異步方法中調用了同步方法
    4. // context:Vuex上下文,相當於this.$store
    5. // 此代碼三秒後執行
    6. setTimeout(function(){
    7. context.commit("setResName",payload)
    8. },3000)
    9. //交互
    10. let _this = payload._this;
    11. let url = _this.axios.urls.SYSTEM_MENU_TREE;
    12. _this.axios.post(url,{}).then(r=>{
    13. console.log(r);
    14. }).catch(e=>{
    15. });
    16. }
    17. }

    VuexPage1:

    控制台看到数据

     

     Vuex中默认情况下是不允许使用vue实例,想要请求后台接口,必须将vue实例当初参数从组件那一方传递过来

    今天的Vuex就分享到这了!!!!

  • 相关阅读:
    STC8H开发(十五): GPIO驱动Ci24R1无线模块
    【Go语言】Gin 框架教程
    MYSQL增删改查
    [JAVA毕业设计源代码]精品微信小程序英语四六级小助手小程序系统|前后分离VUE[包运行成功]
    当 SQL DELETE 邂逅 Table aliases,会擦出怎样的火花
    DevOps最佳实践之应用开发和部署
    氢氧化铝佐剂,完美替代进口品牌明矾佐剂
    Pytorch遇到的坑:MSEloss的输入问题
    [网络安全] 域
    我们有一个新策划,请查收!
  • 原文地址:https://blog.csdn.net/qq_65345936/article/details/126875696