• vuex 学习之路


    目录

    自我认知:

    官方介绍:

    1.state 中定义了userInfo对象;

    2.getters:

    3.mutations:可以简单的理解为存值(注意:mutation 都是同步事务)

    4.actions:异步事务

    5.modules:

    6.vuex安装引入:


     自我认知:

    vuex经常在项目中看到,实际应用起来也只是会用,今天抽时间认真学习了一下。

    一般小型项目只用store模式就够了。简单全局传参使用;平时只是肤浅的知道是一种状态管理,却不知其真正的用处。

    官方介绍:

    Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式 + 库。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。

    Vuex核心概念:state、getters、mutations、actions、modules。

    下面结合实例说明核心概念:

    先看一段store文件定义的相关代码:第一段代码

    1. import Vue from 'vue'
    2. import Vuex from 'vuex'
    3. import app from './modules/app' //分模块modules
    4. Vue.use(Vuex)
    5. const store = new Vuex.Store({
    6. state: {
    7. userInfo:{}
    8. },
    9. mutations: {
    10. //不同的使用场景
    11. changeUserInfo(state,data){
    12. Vue.set(state,'userInfo',data)
    13. },
    14. userInfo: (state, age) => {
    15. state.userInfo.age= age
    16. }
    17. },
    18. actions: {
    19. // 获取用户信息
    20. GetInfo({
    21. commit,
    22. state
    23. }) {
    24. return new Promise((resolve, reject) => {
    25. getInfo({
    26. token: "xxx"
    27. })
    28. .then(res => {
    29. commit("changeUserInfo", res);
    30. resolve(res);
    31. })
    32. .catch(error => {
    33. reject(error);
    34. });
    35. });
    36. },
    37. },
    38. modules: {
    39. app
    40. },
    41. getters
    42. })
    43. export default store

    如上代码所示:

    1.state 中定义了userInfo对象;

    1.1使用方式:

    1)全局任意使用写法:this.$store.state.userInfo;

    2)借助辅助函数:(一般使用...mapState的多) -- 第二段代码

    1. // 在单独构建的版本中辅助函数为 Vuex.mapState
    2. import { mapState } from 'vuex'
    3. export default {
    4. computed: {
    5. //直接使用辅助函数写法
    6. //mapState([
    7. // 映射 this.userInfo为 store.state.userInfo
    8. //'userInfo'
    9. //])
    10. //对象展开运算符写法
    11. ...mapState({
    12. userInfo: (state) => state.user.userInfo
    13. }),
    14. },
    15. created() {
    16. console.log(this.userInfo,"打印试试");
    17. },
    18. }

    2.getters:

    按照之前学习java的经验可以理解为获取值,在getters中可以二次计算或者修改state中定义的值,可以理解为state的计算属性。

    在上面第一段代码中单独定义了一个getter.js 第三段代码

    1. const getters = {
    2.   userInfo: state => state.app.userInfo
    3. }
    4. export default getters

    使用方法:

    1)也是可以直接调用的:

    this.$store.getters.userInfo

    2):借助辅助函数:第四段代码

    1. import { mapGetters} from 'vuex'
    2. export default {
    3. computed: {
    4. //对象展开运算符写法
    5. ...mapGetters({
    6. userInfo: (state) => state.user.userInfo
    7. }),
    8. },
    9. created() {
    10. console.log(this.userInfo,"打印试试2");
    11. },
    12. }

    3.mutations:可以简单的理解为存值且可修改(注意:mutation 都是同步事务

    例如:参照第一段代码中的案例

    存值及提交值的方式:

    let user={};

    $store.commit('changeUser',user);

    3.1在mutations中:state是mutations接收的第一个参数,data是commit提交过来的最终参数值。

    changeUserInfo(state,data){
          Vue.set(state,'userInfo',data)
    },

    3.2提交方式2:也是借助辅助函数

    1. import { mapMutations } from 'vuex'
    2. export default {
    3. // ...
    4. methods: {
    5. ...mapMutations([
    6. 'userInfo', // 将 `this.userInfo()` 映射为 `this.$store.commit('userInfo')`
    7. // `mapMutations` 也支持载荷:
    8. 'userInfo' // 将 `this.userInfo(userInfo)` 映射为
    9. `this.$store.commit('userInfo', userInfo)`
    10. ]),
    11. }
    12. }

    4.actions:异步事务

    官网解释:

    Action 类似于 mutation,不同在于:

    • Action 提交的是 mutation,而不是直接变更状态。
    • Action 可以包含任意异步操作。

    很明显action可以通过函数来改写state的值并提交mutation;

    参考第一段代码案例:

    actions中通过接口getInfo获取到的用户信息提交到mutations中;

    4.1actions的分发调用:

    this.$store.dispatch("GetInfo");来调用getInfo方法;

    5.modules:

    使用场景:当项目中操作多个不同对象时,可以使用modules将store模块分割;

    第一段代码中的app就是一个分割案例;

    app.js中有自己的state以及motations等;

    5.1使用方法:app.js内容

    1. const demoform = {
    2. state: {
    3. shopNum: 0
    4. },
    5. mutations: {
    6. SHOP_NUM: (state, shopNum) => {
    7. state.shopNum = shopNum;
    8. }
    9. },
    10. actions: {
    11. }
    12. };
    13. export default demoform ;

    引入:见第一段代码;

    6.vuex安装引入:

    1.安装:按照官方提示安装即可:

    npm install vuex@next --save

    2.引入在mani.js引入即可;

    import store from "./store";

    至此为止就介绍结束了。文中不当的地方还请同学们多多指点。

  • 相关阅读:
    Tomcat突然停止运行/Server Tomcat v8.5 Server at localhost fail
    QTday04(事件)
    clock_property 时钟的常用属性
    探索SOCKS5与SK5代理在现代网络环境中的应用
    2004NOIP普及组真题 4. 火星人
    铁威马NAS媒体索引设置教程
    Hadoop 王者 Cloudera 新转型,定位为混合数据公司
    OAuth2.0第三方授权原理与实战
    代数——第3章——向量空间
    文件怎么设置密码?一文带你看到文件加密的方法
  • 原文地址:https://blog.csdn.net/myhelloooo/article/details/127615135