• Vuex的使用,详细易懂


    目录

    一.前言

    二.Vuex的简介

    三.vuex的使用

     3.1 安装Vuex

              3.2 使用Vuex的步骤:

    四.vuex的存值取值(改变值)

    五.vuex的异步请求

    好啦,今天的分享就到这啦!!! 


    一.前言

            今天我们继续前面的Element讲解Vuex的使用,相关文章:
    http://t.csdnimg.cn/3hnpNicon-default.png?t=N7T8http://t.csdnimg.cn/3hnpN

    二.Vuex的简介

            Vuex是Vue.js的官方状态管理模式。它被设计为更好地管理应用程序的状态,并且可以轻松地与Vue.js应用程序集成。

    Vuex的核心概念包括state(状态),mutations(变化),actions(动作)和getters(获取器)。

    • State:即存储数据的地方。它保存着整个应用程序的状态,并且可以在不同的组件中共享。通过在Vue组件中使用this.$store.state来访问状态。

    • Mutation : 是改变状态的唯一方式,类似于组件的methods属性。它是同步的,用于修改state中的数据。

    • Actions:Actions用于处理异步操作和提交Mutations。它们可以包含任意异步操作,例如异步请求、定时器等。Actions通过store.dispatch方法来触发。

    • Getters:Getters用于从State中派生出一些状态,类似于计算属性。它们可以通过store.getters方法来获取。

         ---------用图片的方式理解:

    三.vuex的使用

            3.1 安装Vuex

            如果node.js的版本是10那么就用  npm install vuex -S

            如果node.js的版本是18或者10以上就用   npm i -S vuex@3.6.2

     在设置中环境变量中可以查看:

     在我们使用的文件目录下输入:        

           查看结果:

    3.2 使用Vuex的步骤:

    1. 创建store:在src目录下创建store.js文件,引入Vue和Vuex,并创建一个新的Vuex.Store实例。

    2. 定义state:在store.js文件中定义一个state对象,用于存储数据。

    3. 定义mutations:在store.js文件中定义mutations对象,包含一些用于修改state的方法。

    4. 定义actions:在store.js文件中定义actions对象,包含一些用于触发mutations的方法。

    5. 在组件中使用Vuex:在需要使用state的组件中,通过this.$store.state来获取state中的数据。

    6. 在组件中触发mutations和actions:在需要修改state的组件中,通过this.$store.commit来触发mutations,通过this.$store.dispatch来触发actions。

       

    四.vuex的存值取值(改变值)

            先在src下面创建一个store目录,创建state(状态),mutations(变化),actions(动作)和getters(获取器)这四个js文件

            在state.js里面定义默认值:

    1. export default {
    2. eduName: '默认值~~'
    3. }

            在mutations.js 里面设置改变值:

    1. export default {
    2. // type(事件类型): 其值为setEduName
    3. // payload:官方给它还取了一个高大上的名字:载荷,其实就是一个保存要传递参数的容器
    4. setEduName: (state, payload) => {
    5. state.eduName = payload.eduName;
    6. }
    7. }

             在getters.js里面获取值:

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

    在store目录下在创建一个index.js文件:

    1. import Vue from 'vue'
    2. import Vuex from 'vuex'
    3. import state from './state'
    4. import getters from './getters'
    5. import actions from './actions'
    6. import mutations from './mutations'
    7. Vue.use(Vuex)
    8. const store = new Vuex.Store({
    9. state,
    10. getters,
    11. actions,
    12. mutations
    13. })
    14. export default store

     接着在mian.js里面挂载:

    1. // The Vue build version to load with the `import` command
    2. // (runtime-only or standalone) has been set in webpack.base.conf with an alias.
    3. import Vue from 'vue'
    4. import Vuex from 'vuex'
    5. //开发环境下才会引入mockjs
    6. process.env.MOCK && require('@/mock')
    7. // 新添加1
    8. import ElementUI from 'element-ui'
    9. // 新添加2,避免后期打包样式不同,要放在import App from './App';之前
    10. import 'element-ui/lib/theme-chalk/index.css'
    11. import App from './App'
    12. import router from './router'
    13. //添加vuex
    14. import store from './store'
    15. // 新添加3
    16. Vue.use(ElementUI)
    17. Vue.config.productionTip = false
    18. import axios from '@/api/http'
    19. import VueAxios from 'vue-axios'
    20. Vue.use(VueAxios, axios)
    21. /* eslint-disable no-new */
    22. new Vue({
    23. el: '#app',
    24. router,
    25. store,
    26. data() {
    27. return {
    28. // 定义总线
    29. Bus: new Vue()
    30. }
    31. },
    32. components: {
    33. App
    34. },
    35. template: ''
    36. })

    最后测试:

    page1.vue:

    1. <template>
    2. <div>
    3. <h1>第一个界面</h1>
    4. 请输入:<input v-model="msg" />
    5. <button @click="fun1">获取值</button>
    6. <button @click="fun2">改变值</button>
    7. </div>
    8. </template>
    9. <script>
    10. export default {
    11. data() {
    12. return {
    13. msg: '默认值'
    14. }
    15. },
    16. methods: {
    17. fun1() {
    18. let eduName = this.$store.state.eduName;
    19. alert(eduName);
    20. },
    21. fun2() {
    22. this.$store.commit('setEduName', {
    23. eduName: this.msg
    24. })
    25. let eduName = this.$store.state.eduName;
    26. // alert(eduName);
    27. }
    28. }
    29. }
    30. </script>
    31. <style>
    32. </style>

     page2.vue:

    1. <template>
    2. <div style="padding: 50px;padding-top: 20px;">
    3. <h1>页面二</h1>
    4. {{eduName}}
    5. </div>
    6. </template>
    7. <script>
    8. export default {
    9. data() {
    10. return {
    11. mag: '弹射下班'
    12. }
    13. },
    14. computed: {
    15. eduName() {
    16. return this.$store.state.eduName;
    17. }
    18. }
    19. }
    20. </script>
    21. <style>
    22. </style>

    结果:

    五.vuex的异步请求

            在page1里面:

    1. <button @click="fun3">改变值button>
    2. fun3(){
    3. this.$store.dispatch("setEduNameByAsync",{
    4. eduName:this.msg
    5. })
    6. },

    在action.js里面:

    1. export default {
    2. setEduNameByAsync: function(context, payload) {
    3. setTimeout(() => {
    4. //这里的setEduName(事件类型)是指mutations.js中的setEduName事件
    5. context.commit('setEduName', payload);
    6. }, 7000);
    7. //7000是指7秒之后执行这个事件
    8. },
    9. setEduNameByAjax: function(context, payload) {
    10. let _this=payload._this;
    11. //定义后端都请求地址
    12. let url = _this.axios.urls.VUEX;
    13. let params = {
    14. resturantName: payload.eduName
    15. }
    16. _this.axios.post(url, params).then(r => {
    17. console.log(r);
    18. }).catch(e => {
    19. console.log(e);
    20. });
    21. }
    22. }

            结果:

    好啦,今天的分享就到这啦!!! 

  • 相关阅读:
    7_画图常用代码
    AN动画基础——父子级关系
    Vue+SpringBoot实现评论功能
    day13【代码随想录】环形链表II、环形链表、快乐数、各位相加、丑数、丑数||
    pytorch 手写数字识别1
    函数指针数组指针(指向函数指针数组的指针)
    [ASPX]常用笔记
    Intellij Debugger slow: Method breakpoints may dramatically slow down debugging
    (pytorch进阶之路)cGAN、LSGAN
    基础MySQL的语法练习
  • 原文地址:https://blog.csdn.net/YZZdear/article/details/133743101