vuex实战,vuex详解和用法

  vuex实战,vuex详解和用法

  本文主要介绍了vuex的入门课程,并对图形实例进行了分析,具有很好的参考价值。希望对大家有帮助。

  

目录

  我理解概念的核心概念。不要胡说八道。直接在实例中解释安装和创建。然后看店铺的实例化。直接在实例中挂载存储。了解如何快速使用商店。简单解释一下,直接看效果。

  

我理解的概念

  Vuex为vue提供了一个全局的状态存储,就像一个状态机一样,避免了父子和兄弟组件复杂的参数传递。他维护全球共享数据的一致性。

  

核心概念秒懂

  1、数据由国家共享

  2.getters在处理状态后获得所需的数据

  3、突变唯一能修改状态的功能

  4.动作只能显式调用突变,可以异步请求数据。

  5.moudles把1、2、3、4的包当作一个模块,可以是多个,也可以不是。

  

不说废话直接在实例里面一一解释

  项目结构:

  

安装

  cnpm i vuex -S

  

创建

  创建一个如图所示的商店。

  以下代码都是moduleA代码,

  state.js

  常量状态={

  用户信息:{

  用户名:“品尝秋刀鱼长笛”,

  年龄:28,

  工作:“前端工程师”

  },

  朋友:[],

  女朋友:[

  {

  姓名:洛斯,

  年龄:20,

  国籍:“韩国”

  },

  {

  姓名:“安妮”,

  年龄:22,

  国籍:“俄罗斯”

  }

  ]

  }

  导出默认状态;

  国家没什么好解释的。它只是一个物体。输入你想要的状态码。

  getters.js

  const getters={

  userJob: (state)={

  返回“{ state . userinfo . job }”

  },

  girlfirendInfo: (state,getters)={

  const girl firend=state . girl firend

  let info=girlfirend.map((item,index)={

  return “{ index 1 }的女朋友叫{ item . name },年龄{ item . age },来自{ item . nationality } `的

  }).联接(,)

  Return总共有$ { girlfiend.length }个女朋友,${info},可怕的是他只是一个${getters.userJob}。`

  }

  }

  导出默认getters

  getter接受两个参数,第一个是state,第二个是getter中的其他函数。

  mutation.js

  从“axios”导入axios;

  常量突变={

  ageAdd(状态,有效负载){

  有效负载=有效负载 1

  state.userInfo.age=有效负载

  },

  addGirlFirend(状态,有效负载){

  state.girlfirend.push({姓名:有效载荷.姓名,年龄:有效载荷.年龄,国籍:有效载荷.国籍})

  },

  getFirend(状态,有效负载){

  state.firend=有效负载

  },

  Mutfired (state) {//vuex禁止突变中的异步操作,严格模式给出错误,调试困难。

  axios.get(/myServer )。然后(res={

  if (res.status===200) {

  state . firend=RES . data . data . list

  }

  })

  }

  }

  导出默认突变;

  Mutations接受两个参数:state payload(调用时携带的参数),这是唯一可以修改状态的地方。注意,接口不能是异步的,也不能是可调的,严格模式会报错。

  如图所示:

  actions.js

  从“axios”导入axios;

  常量操作={

  addGirlFirend ({ commit,state,getters },payload) {

  commit(addGirlFirend ,有效负载);

  },

  GetFirends (ctx) {//ctx是当前存储下的模块对象。

  axios.get(/myServer )。然后(res={

  if (res.status===200) {

  ctx.commit(getFirend ,res.data.data.list)

  //您也可以直接在actions中修改状态,但不建议这样做。当您在严格模式下创建存储时,您将报告一个错误,这不符合vuex单向数据流的规范(您只能在分段中修改状态)

  //CTX . state . firend=RES . data . data . list

  }

  })

  }

  }

  导出默认操作;

  Actions接受当前模块的一个上下文对象(通常是commit),用来提交提交突变,主要是请求后端数据,可以是异步的。

  index.js

  从导入状态。/state ;

  从导入getters。/getters ;

  从导入突变。/mutations . js ;

  从导入操作。/actions ;

  常数模块A={

  状态,

  吸气剂,

  突变,

  行动

  }

  导出默认模块a;

  组装组件以露出模块。

  

再来看看store的实例化

  商店/索引. js

  从" vuex "导入状态管理

  从“vue”导入某视频剪辑软件

  从""导入模块答./moduleA ;

  从导入模块乙./moduleB ;

  Vue.use(Vuex)

  let store=new Vuex .商店({

  //在严格模式下,无论何时发生了状态变更且不是由变化函数引起的,将会抛出错误。这能保证所有的状态变更都能被调试工具跟踪到。

  //*严格模式会深度监测状态树来检测不合规的状态变更——请确保在发布环境下关闭严格模式,以避免性能损失。

  strict: process.env.NODE_ENV!==生产,//自动在生产环境下关闭严格模式

  模块:{

  moduleA,

  模块b

  }

  })

  导出默认存储

  注意:一定要用使用一下vuex,最好使用严格模式!

  当然商店里面还可以用命名空间和插件,一般项目用不上

  

挂载store

  在项目主文件

  主页。射流研究…实例化某视频剪辑软件时,挂载

  新Vue({

  埃尔: #app ,

  路由器,

  店,

  组件:{ App },

  模板:"应用程序/"

  })

  

直接在实例里面看怎么快速使用store吧

  helloWorld.vue

  模板

  差异

  卡片样式=宽度:550像素

  div slot=title

  图标类型= IOs-film-outline /图标

  个人信息

  /div

  差异

  p姓名:{{userInfo.userName}}/p

  p年龄:{{userInfo.age}}/p

  {{girlfirendInfo}}

  /div

  /卡片

  hr style=margin:20px 0 /

  button type= success @ click= ageAdd()增加了一岁/按钮

  hr style=margin:20px 0 /

  按钮类型=成功@click=addAge 增加了两岁(提交)/按钮

  hr style=margin:20px 0 /

  卡片样式=宽度:550像素

  div slot=title

  图标类型= IOs-film-outline /图标

  女友信息:

  /div

  差异

  名字:

  输入v-model=girlInfo.name/Input

  年龄:/br

  input-number:max= 100 :min= 1 v-model=女孩信息。年龄/输入数字/br

  国籍:

  输入v-model=女孩信息。国籍/输入

  /div

  button type= success @ click= addGirlFirend(女孩信息)增加/按钮

  按钮类型=成功@click=addGirlFirend1 增加(调度)/按钮

  /卡片

  hr style=margin:20px 0 /

  卡片样式=宽度:550像素

  div slot=title

  图标类型= IOs-film-outline /图标

  朋友信息:

  /div

  差异

  p v-for= item in firend :key= item。用户名“{ item。用户名} }/p

  /div

  按钮类型=info @click=getFirends 获取朋友/按钮

  /卡片

  /div

  /模板

  脚本

  从" vuex "导入{ mapState,mapGetters,mapMutations,mapActions }

  导出默认值{

  data () {

  返回{

  girlInfo: {

  名称: ,

  年龄:18,

  国籍:""

  }

  }

  },

  计算值:{

  .mapGetters([girlfirendInfo]),

  .mapState({

  userInfo:state=州。模块a。userInfo,//使用状态管理的模块后一定要指明模块

  state=state.moduleA.firend

  })

  },

  方法:{

  .mapActions([addGirlFirend , getFirends]),//this .$store.dispatch(addGirlFirend ,有效负载)

  .mapMutations([ageAdd]),//this .$store.commit(ageAdd ,有效负载)

  //上面两个辅助函数方法的实质跟下面是一样的,推荐使用辅助函数

  addAge () {

  这个store.commit(ageAdd ,2)

  },

  addGirlFirend1 () {

  这个. store.dispatch(addGirlFirend ,this.girlInfo)

  }

  }

  }

  先看一下初始用户界面吧

  

简单解释一下

  主要的四个模块,有对应的四个辅助函数,用处是把状态和操作映射到当前页面

  地图状态和地图获取者,是状态数据,放在计算属性;地图突变和地图操作是操作函数,显然放在方法里面;注意带的注释;

  

直接看效果吧

  调用突变

  调用行动

  行动调接口

  状态管理的问题,解决方法点击状态管理刷新状态就没了

  以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: