Vuex入门实例教程

本文详细介绍了Vuex,它是Vue.js中用于组件全局状态管理的库,旨在集中管理共享数据并提高开发效率。文章讲解了Vuex的核心概念,包括State(存储全局数据)、Mutation(安全修改State)、Action(处理异步任务)和Getter(计算属性)。通过案例展示了如何在实际项目中使用Vuex,包括添加、删除和更新列表项,以及计算未完成任务数量等操作。
摘要由CSDN通过智能技术生成

Vuex

Vuex入门

Vuex概述

Vuex是实现组件全局状态(数据)管理的一种机制,可以方便的实现组件之间数据的共享

使用Vuex统一管理状态的好处

  • 能够在vuex中集中管理共享的数据,易于开发和后期维护
  • 能够高效地实现组件之间的数据共享,提高开发效率
  • 存储在vuex中的数据都是响应式的,能够实时保持数据与页面的同步

什么样的数据适合存储在Vuex中

一般情况下,只有组件之间共享的数据,才有必要存储到vuex中;对于组件中的私有数据,依旧存储在组件自身的data中即可

Vuex的基本使用

一、安装vuex依赖包

npm install vuex --save

二、导入vuex包

import Vuex from 'vuex'
Vue.use(Vuex)

三、创建store对象

const store = new Vuex.Store({
    //state中存放的就是全局共享的数据
    state:{count:0}
})

四、将store对象挂载到vue实例中

new Vue({
    el:'#app',
    render:h => (app),
    router,
    //将创建的共享数据对象,挂载到vue实例中
    //所有的组件,就可以直接从store中获取全局的数据了
    store
})

Vuex测核心概念

vuex中的主要核心概念如下

  • State
  • Mutation
  • Action
  • Getter

State

State提供唯一的公共数据源,所有共享的数据都要统一放到Store的State中进行存储

//创建store数据源,提供唯一公共数据
const store = new Vuex.Store({
    state:{count:0}
})

组件中访问State中数据的第一种方式:

this.$store.state.全局数据名称

组件访问State中数据的第二种方式:

//1、从vuex中按需导入mapState函数
import { mapState } from 'vuex'

通过刚才导入的mapState函数,将当前组件需要的全局数据,映射为当前组件的computed计算属性

//2、将全局数据,映射为当前组件的计算属性
computed: {
    ...mapState(['count']) //展开运算符
}

注意:在vuex中,我们是不允许在组件中直接修改store中的数据的。如需修改,使用mutation

Mutation

Mutation用于变更Store中的数据

  • 只能通过mutation变更Store数据,不可以直接操作Store中的数据
  • 通过mutation这种方式虽然操作起来稍微麻烦一些,但是可以集中监控所有数据的变化
// 在Mutation中定义add函数
const store = new Vuex.Store({
    state:{
        count:0
    },
    //定义Mutation
    mutations:{
        add(state){
            //变更状态
            state.count++
        }
    }
})
//调用Mutation中的add函数
methods:{
    handler1(){
        //触发mutations的第一种方式,commit的作用就是调用某个mutation函数
        this.$store.commit('add')
    }
}

切记:只有mutation中的函数才有权利去修改state中的数据!!!

可以在触发mutation时传递参数

const store = new Vuex.Store({
    state:{
        count:0
    },
    //定义Mutation
    mutations:{
        //接受参数,第一个参数必须是state
        addN(state,step){
            state.count += step
        }
    }
})
//调用Mutation中的add函数
methods:{
    handler2(){
        this.$store.commit('addN',3)
    }
}

触发mutation的第二种方式

this.$store.commit( ) 是触发mutation的第一种方式

//1、从vuex中按需导入mapMutations函数
import { mapMutations } from 'vuex'

通过刚才导入的mapMutations函数,将需要的mutations函数,映射为当前组件的methods方法:

//2、将指定的mutations函数,映射为当前组件的methods函数
methods:{
    ...mapMutations(['sub']),
    //直接调用上面映射的方式咯
    btnHandler1(){
      this.sub()
    }
}

注意:不要在mutation中执行异步操作!!!

Action

Action用于处理异步任务

如果通过异步操作变更数据,必须通过Action,而不能使用Mutation。但是在Action中还是要通过触发Mutation的方式间接变更数据

//定义actions
const store = new Vuex.Store({
    state: {
    count:0
  },
mutations: {
    add(state){
      state.count++
    }
  },
actions: {
    //执行异步操作,在action中不能直接修改state中的数据,只有mutations中的函数才能修改state的数据
    addAsync(context){
      setTimeout(() => {
        context.commit('add')
      }, 1000);
    }
  }
})


//触发actions,调用dispatch()函数
methods:{
      handler(){
        this.$store.dispatch('addAsync')
      }
  }

触发actions异步任务时携带参数

const store = new Vuex.Store({
    state: {
    count:0
  },
mutations: {
    addN(state,step){
      state.count += step
    }
  },
actions: {
    //执行异步操作,在action中不能直接修改state中的数据,只有mutations中的函数才能修改state的数据
    addAsync(context,step){
      setTimeout(() => {
        context.commit('addN',step)
      }, 1000);
    }
  }
})
//触发actions,调用dispatch()函数
methods:{
      handler(){
        this.$store.dispatch('addAsync',5)
      }
  }

触发actions的第二种方式

this.$store.dispatch( ) 是触发action的第一种方式

//1、从vuex中按需导入mapActions函数
import { mapActions } from 'vuex'

通过刚才导入的mapActions函数,将需要的actions函数映射为当前组件的methods方法

methods:{
    ...mapActions(['addAsync','addNAsync'])
}

Getter

Getter用于对Store中的数据进行加工处理形成新的数据,不会修改Store中的原数据

  • 类似Vue的计算属性
  • Store中数据发生变化,Getter的数据也会跟着变化
//定义Getter
const store = new Vuex.Store({
    state:{
        count:0
    },
    getters:{
        showNum:state => {
            return '当前最新的数据是'+state.count
        }
    }
})
//第一种触发方式
this.$store.getters.名称
//第二种触发方式
import { mapGetters } from 'vuex'
computed:{
    ...mapGetters(['showNum'])
}

小案例

app.vue

<template>
  <div id="app">
    <a-input placeholder="请输入任务" class="my_ipt" :value="inputValue" @change="handleInputChange"/>
    <a-button type="primary" @click="addItemToList">添加事项</a-button>

    <a-list bordered :dataSource="list" class="dt_list">
      <a-list-item slot="renderItem" slot-scope="item">
        <!-- 复选框 -->
        <a-checkbox :checked="item.done" @change="(e) => {cbstatusChanged(e,item.id)}">{{item.info}}</a-checkbox>
        <!-- 删除链接 -->
        <a slot="actions" @click="removeItemById(item.id)">删除</a>
      </a-list-item>

      <!-- footer区域 -->
      <div slot="footer" class="footer">
        <!-- 未完成的任务个数 -->
        <span>{{unDoneLength}}条剩余</span>
        <!-- 操作按钮 -->
        <a-button-group>
          <a-button type="primary">全部</a-button>
          <a-button>未完成</a-button>
          <a-button>已完成</a-button>
        </a-button-group>
        <!-- 把已经完成的任务清空 -->
        <a>清除已完成</a>
      </div>
    </a-list>
  </div>
</template>

<script>
import { mapState,mapMutations,mapGetters } from 'vuex'

export default {
  name: 'app',
  data() {
    return {}
  },
  created(){
    this.$store.dispatch('getList')
  },
  computed:{
    ...mapState(['list','inputValue']),
    ...mapGetters(['unDoneLength'])
  },
  methods:{
    ...mapMutations(['setInputValue']),
    handleInputChange(e){
      console.log(e.target.value)
      this.setInputValue(e.target.value)
    },
    //向列表中新增
    addItemToList(){
      if(this.inputValue.trim().length <= 0){
        return this.$message.warning('文本框内容不能为空')
      }
      this.$store.commit('addItem')
    },
    //根据id删除
    removeItemById(id){
      console.log(id)
      this.$store.commit('removeItem',id)
    },
    //监听复选框选中状态变化的事件
    cbstatusChanged(e,id){
      //通过e.target.checked可以获取到最新的选中状态
      // console.log(e.target.checked)
      // console.log(id)

      const param = {
        id:id,
        status:e.target.checked
      }

      this.$store.commit('changeStatus',param)

    }
  }
}
</script>

<style scoped>
#app {
  padding: 10px;
}

.my_ipt {
  width: 500px;
  margin-right: 10px;
}

.dt_list {
  width: 500px;
  margin-top: 10px;
}

.footer {
  display: flex;
  justify-content: space-between;
  align-items: center;
}
</style>

store.js

import Vue from 'vue'
import Vuex from 'vuex'
import axios from 'axios'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    //所有的任務列表
    list:[],
    //文本框的內容
    inputValue:'aaa',
    //下一个id
    nextId:5
  },
  mutations: {
    initList(state,list){
        state.list = list
    },
    //为store中inputValue赋值
    setInputValue(state,value){
      state.inputValue = value
    },
    addItem(state){
      const obj = {
        id:state.nextId,
        info:state.inputValue.trim(),
        done:false
      }
      console.log('obj------------------'+obj)
      state.list.push(obj)
      state.nextId++
      state.inputValue = ''
    },
    //根据id删除对应的数据
    removeItem(state,id){
      //根据id查找对应的索引
      const index = state.list.findIndex(x => x.id === id)
      //根据索引删除元素
      if(index !== -1){
        state.list.splice(index,1)
      }
    },
    //改变选中的状态
    changeStatus(state,param){
      const index = state.list.findIndex( x => x.id ===param.id);
      if(index !== -1){
        state.list[index].done = param.status
      }
    }
  },
  actions: {
    getList(context){
      axios.get('/list.json').then(({data}) => {
        console.log(data)
        context.commit('initList',data)
      })
    }
  },
  getters:{
    //统计未完成的任务的条数
    unDoneLength(state){
        return state.list.filter(x => x.done === false).length
    }
    //已完成的任务的条数
  },
  modules: {
  }
})

# list.json

[
    {
      "id": 0,
      "info": "Racing car sprays burning fuel into crowd.",
      "done": true
    },
    {
      "id": 1, 
      "info": "Japanese princess to wed commoner.", 
      "done": false
    },
    {
      "id": 2,
      "info": "Australian walks 100km after outback crash.",
      "done": true
    },
    { 
      "id": 3, 
      "info": "Man charged over missing wedding girl.", 
      "done": false
    },
    { 
      "id": 4, 
      "info": "Los Angeles battles huge wildfires.", 
      "done": false
    }
]
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
山西煤炭职业技术学院计算机信息系 毕业设计 题 目 填料箱盖的工艺规程及夹具设计 毕业设计(论文) 原创性声明和使用授权说明 原创性声明 本人郑重承诺: 所呈交的毕业设计( 论文), 是我个人在指导教师的 指导下进行的研究工作及取得的成果。 尽我所知, 除文中特别加以标注 和致谢的地方外, 不包含其他人或组织已经发表或公布过的研究成果, 也不包含我为获得 及其它教育机构的学位或学历而使用过的 材料。 对本研究提供过帮助和做出过贡献的个人或集体, 均已在文中作 了 明确的说明并表示了 谢意。 作 者 签 名: 日 期: 指导教师签名: 日 期: 使用授权说明 本人完全了 解 大学关于收集、 保存、 使用毕业设计( 论文) 的规定, 即: 按照学校要求提交毕业设计( 论文) 的印刷本和电子版本; 学校有权保存毕业设计( 论文) 的印刷本和电子版, 并提供目 录检索与 阅览服务; 学校可以采用影印、 缩印、 数字化或其它复制手段保存论文; 在不以赢利为目 的前提下, 学校可以公布论文的部分或全部内容。 作者签名: 日 期: 学位论文原创性声明 本人郑重声明: 所呈交的论文是本人在导师的指导下独立进行研究所 取得的研究成果。 除了 文中特别加以标注引 用的内容外, 本论文不包含 任何其他个人或集体已经发表或撰写的成果作品。 对本文的研究做出重 要贡献的个人和集体, 均已在文中以明确方式标明。 本人完全意识到本 声明的法律后果由本人承担。 作者签名 : 日 期: 年 月 日 学位论文版权使用授权书 本学位论文作者完全了 解学校有关保留、 使用学位论文的规定, 同意 学校保留并向国家有关部门或机构送交论文的复印件和电子版, 允许论 文被查阅和借阅。 本人授权 大学可以将本学位论文的全部 或部分内容编入有关数据库进行检索, 可以采用影印、 缩印或扫描等复 制手段保存和汇编本学位论文。 涉密论文按学校规定处理。 作者签名 : 日 期: 年 月 日 导师签名 : 日 期: 年 月 日 填料箱盖的工艺规程及夹具设计 摘 要 填料箱盖, 其主要作用是保证对箱体起密封作用, 使箱体在工作时 不致让油液渗漏。 对内表面的加工精度要求比较高, 对配合面的表面粗糙 度要求也较高。 本次设计旨在提高填料箱盖的加工效率, 设计正确的加工工艺路线, 由此我们首先对填料箱盖的结构特征和工艺进行了仔细的分析, 然后确 定了一套合理的加工方案, 加工方案要求简单, 操作方便, 并能保证零 件的加工质量。 填料箱盖的加工质量将直接影响机器的性能和使用寿命。 在设计中采用四大步骤进行, 分别是[1]填料箱盖零件的分析[2]工 艺规程设计[3]数控机床的选择与加工方案[4]专用夹具设计 关键词: 填料箱盖, 零件, 毛坯, 夹具 目 录 第一章 填料箱盖零件的分析 . ............................................ 7 1. 1 零件的作用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1. 2 填料箱盖的技术要求分析 ........................................... 8 1. 3 本章小结 ........................................................ 9 第二章 工艺规程设计 .................................................. 10 2. 1 零件机械加工工艺规程的制定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2. 2 箱体零件的材料、 毛坯和热处理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 2. 3 基准面的选择 ................................................... 17 2. 4 制订工艺路线 ................................................... 17 2. 5 机械加工余量、 工序尺寸及毛坯尺寸的确定 . . . . . . . . . . . . . . . . . . . . . . . . . 22 2. 6 本章小结 ....................................................... 23 第三章 机床的选择与加工方案 .......................................... 24 3. 1 选择机床 ....................................................... 24 3. 2 选择夹具 ....................................................... 26 3. 3 选择刀具 ....................................................... 26 3. 4 确定工序尺寸 .................................................... 27 3. 5 确定切削用量 ................................................... 28 3. 6 本章小结 ........................................................ 38 第四章 专用夹具设计 .................................................. 39 4. 1 问题的指出 ...................................................... 40 4. 2 夹具设计 ........................................................ 40 4. 3 定位误差的分析 .................................................. 41 4. 4 夹具设计及操作的简要说明 ........................................ 41 4. 5 本章小结 ........................................................ 41 结 论 ................................................................ 43 致 谢 ................................................................ 44 参考文献 .............................................................. 45 第一章 填料箱盖零件的分析 1.1  零件的作用 题目所给定的零件是填料箱盖(图 1 -1 ), 其主要作用是保证对箱体起密封作用, 使箱体 在工作时不致让油液渗漏。 a 实体图 b. 零件图 图 1-1 填料箱盖 1.2  填料箱盖的技术要求分析 填料箱盖的零件图中规定了一系列技术要求: (查表 1 .4-28《机械制造工艺设计简明手 册》) 1、 以Φ65H5( 0 013 . 0  ) 轴为中心的表面进行加工 包括: 尺Φ寸为Φ65h5( 0 013 . 0  ) 的轴, 表面粗糙度为 1. 6, 尺寸为Φ80 的与Φ65h5 ( 0 013 . 0  ) 相接的肩面, 尺寸为Φ100f8( 036 . 0 090 . 0   ) 与Φ65h5( 0 013 . 0  ) 同轴度为 0. 025 的面, 尺寸为Φ60H8 ( 046 . 0 0  ) 与Φ65h5( 0 013 . 0  ) 同轴度为 0. 025 的孔。 2、 以Φ60H8( 046 . 0 0  ) 孔为中心的表面进行加工 尺寸为 78 与Φ60H8( 046 . 0 0  ) 垂直度为 0. 012 的孔底面, 表面粗糙度为 0. 4, 须研磨。 3、 以Φ60H8( 046 . 0 0  ) 孔为中心均匀分布的 12 孔, 6-ф 13. 5, 4-M10-6H 深20 孔深 24 及2-M10-6H的孔进行加工 1.3   本章小结 在本章节中对题目所给的零件进行了简要的工艺分析, 注明了各个孔的同轴度、 面的粗糙度。 第二章 工艺规程设计 2.1   零件机械加工工艺规程的制定 零件机械加工工艺规程是规定零件机械加工工艺过程和方法等的工艺文件。 它是 在具体的生产条件下, 将最合理或者比较合理的工艺过程, 用图表(或文字) 的形式 制成用来指导生产、 管理生产的文件。 2.1.1 机械加工工艺规程的内容及作用 工艺规程的内容, 一般有零件的加工工艺路线、 各工序基本加工内容、 切削用量、 工时定额及采用的机床和工艺装备(刀具、 夹具、 量具、 模具) 等。 工艺规程的主要作用如下: 1、 工艺规程是指导生产的主要技术文件。 合理的工艺规程是建立在正确的工艺 原理和实践基础上的, 是科学技术和实践经验的结晶。 因此, 它是获得合格产品的技 术保证, 一切生产和管理人员必须严格遵守。 2、 工艺规程是生产组织管理工作、 计划工作的依据。 原材料的准备、 毛坯的制 造、 设备和工具的购置、 专用工艺装备的设计制造、 劳动力的组织、 生产进度计划的 安排等工作都是依据工艺规程来进行的。 3、 工艺规程是新建或扩建工厂或车间的基本资料。 在新建扩建或改造工厂或车 间时, 需依据产品的生产类型及工艺规程来确定机床和设备的数量及种类, 工人工种、 数量及技术等级, 车间面积及机床的布置等。 2.1.2 制定工艺规程的原则、 原始资料 1、 制定工艺规程的原则 制定工艺规程的原则是: 在保证产品质量的前提下, 以最快的速度、 最少的劳动 消耗和最低的费用, 可靠加工出符合设计图纸要求的零件。 同时, 还应在充分利用现 有生产条件的基础上, 尽可能保证技术上先进、 经济上合理、 并且有良好的劳动条件。 2、 制定工艺规程的原始资料 ⑴ 产品零件图样及装配图样。 零件图样标明了零件的尺寸和形位精度以及其他 技术要求, 产品的装配图有助于了解零件在产品中的位置、 作用, 所以, 它们是制定 工艺规程的基础。 ⑵ 产品的生产纲领。 ⑶ 产品验收的质量标准。 ⑷ 现有生产条件, 如机床设备、 工艺装备、 工人技术水平及毛坯的制造生产能 力等。 ⑸ 同类产品的生产工艺资料。 2.1.3 制定工艺规程的步骤 1、 零件图样分析 零件图样分析的目的在于: ⑴ 分析零件的技术要求, 主要了解各加工表面的精度要求、 热处理要求, 找出 主要表面并分析它与次要表面的位置关系, 明确加工的难点及保证零件加工质量的关 键, 以便在加工时重点加以关注。 ⑵ 审查零件的结构工艺性是否合理, 分析零件材料的选取是否合理。 2、 毛坯选择 毛坯的选择主要依据以下几方面的因素: ⑴ 零件的材料及机械性能 零件的材料一旦确定, 毛坯的种类就大致确定了。 例如材料为铸铁, 就应选铸造毛坯; 钢质材料的零件, 一般可用型材; 当零件的机械 性能要求较高时要用锻造; 有色金属常用型材或铸造毛坯。 ⑵ 零件的结构形状及尺寸 例如, 直径相差不大的阶梯轴零件可选用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值