Vuex-核心概念

一、state

本质上“状态”就是数据,因为“数据驱动视图”

你可以把store理解成当前应用程序的“数据仓库”“数据银行”

作用: 用于定义可共享的数据(响应式的)

特点:当state发生变化时,那些使用了state的视图组件会自动更新

// 1、【不建议】直接修改store中数据

      // this.$store.state.count++

      // 2、【建议】使用$store.commit()提交并触发一个mutations方法去修改store数据

      // this.$store.commit('study/changeCount', {type, step: 2})

使用$store.dispatch()派发并触发一个actions方法去调接口

二、getters

 作用:相当于是vue的computed计算属性,常常用于对state变量进行二次计算。

 特点1:当getters方法所关联的state变量发生变化时,getters方法才会重新计算。

 特点2:子store的getters默认在根store的getters上可以直接访问(给人感觉貌似没有拆分)。

 语法:xxxCal(state)

三、mutations

作用:vuex官方建议的一种用于修改state的方式

语法:在mutations中可以封装很多个用于修改state方法,其语法 xxxState(state,payload)

使用:在vue组件中,this.$store.commit('xxxState', '数据')

注意:mutations方法用于同步地更新state,不建议使用异步逻辑,比如定时器或调接口。为什么不建议使用异步逻辑呢?原因是devtools识别不了

四、actions

作用:vuex官方建议的一种用于与后端通信的方式

语法:在actions封装各种调接口的方法,其语法 xxxFetchApi(store, payload)

使用:actions方法用于调接口,在组件中 this.$store.dispatch('xxxFetchApi', '数据')

注意:我们只是建议actions方法用于调接口,事实上在actions方法也可以直接修改state。

五、什么是vuex?

       vuex是vue技术栈中唯一的一个状态管理工具,用于管理vue应用程序中的数据。它的设计思想借鉴自Flux数据架构思想。(如果你能把vuex用好,那么理论上你的vue项目中的数据流应该是可预测的)

作用:实现组件之间的数据共享(功能实现);实现数据缓存(用户体验)

在vue项目中如何实现代理?(解决浏览器CORS对ajax跨域请求的阻塞)

1.配置BaseUrl

:axios.defaults.baseURL = '/api',作用是我们每次发送的请求都会带一个/api的前缀。

2.配置代理

dev: {

    env: require('./dev.env'),

    port: 8090,

    autoOpenBrowser: true,

    assetsSubDirectory: 'static',

    assetsPublicPath: '/',

    proxyTable: {

      '/api': {

        target:'http://api.douban.com/v2', // 你请求的第三方接口

        changeOrigin:true, // 在本地会创建一个虚拟服务端,然后发送请求的数据,并同时接收请求的数据,这样服务端和服务端进行数据的交互就不会有跨域问题

        pathRewrite:{  // 路径重写,

          '^/api': ''  // 替换target中的请求地址,也就是说以后你在请求http://api.douban.com/v2/XXXXX这个地址的时候直接写成/api即可。

        }

      }

    },

解决跨域来源


六、使用modules、namespaced这两个属性实现对store的拆分(思考:为什么要拆分?)

modules

作用:从vue项目管理的角度来思考,当多人协同开发时,我们希望把这个根store拆分成多个子store。好处是多人开发时彼此不干扰,其次便于代码的维护

namespaced

默认情况下,模块内部的 action、mutation 和 getter 是注册在全局命名空间的——这样使得多个模块能够对同一 mutation 或 action 作出响应。

如果希望你的模块具有更高的封装度和复用性,你可以通过添加 namespaced: true 的方式使其成为带命名空间的模块。当模块被注册后,它的所有 getter、action 及 mutation 都会自动根据模块注册的路径调整命名。

七、四个map方法的使用

mapState

当一个组件需要获取多个状态的时候,将这些状态都声明为计算属性会有些重复和冗余。为了解决这个问题,我们可以使用 mapState 辅助函数帮助我们生成计算属性,让你少按几次键

mapGetters

将 store 中的 getter 映射到局部计算属性:

mapActions

创建组件方法分发 action

mapMutations

创建组件方法提交 mutation

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,997评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,603评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,359评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,309评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,346评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,258评论 1 300
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,122评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,970评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,403评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,596评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,769评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,464评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,075评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,705评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,848评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,831评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,678评论 2 354

推荐阅读更多精彩内容