Vuex实现数据增加和删除功能


Posted in Javascript onNovember 11, 2019

首先,我们要安装vuex,执行命令yarn add vuex

1.编写state数据

//vuex/index.js
import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);
const state = {
  bookList: [
   {id: 1, name: '西游记'},{id: 2, name: '水浒传'},
   {id: 3, name: '红楼梦'},{id: 4, name: '三国演义'}
  ]
}
export default new Vuex.Store({
  state
})

2.组件调用state数据进行展示

我们的目的是把state数据赋值给vue组件进行使用,其实,这里有两种常用方法

//Home.vue
<p v-for='item in bookList'>{ {item.name} }<p/>

//方法一:通过computed的计算属性直接赋值,computed属性可以在输出前,对data中的值进行改变,我们就利用这种特性把state值赋值给vue模板中的data进行使用
computed: {
  bookList( ) {
   return this.$store.state.bookList;
  }
}

//方法二:通过mapState的对象来赋值
import { mapState } from 'vuex';//首先在组件内引入mapState
computed: {
  ...mapState(['bookList'])
}

方式二是我们经常用到的简写方式

基本的数据获取,就是这样的实现,此时我们看页面,就会循环展示state中的bookList数据

3.利用mutation、action实现增加删除数据

//vuex/index.js
const mutations = {
  ADD_ITEM(state,item) {
   state.bookList.push(item)
  }
}
const mutations = {
  ADD_ITEM(state,item) {
   state.bookList.push(item)
  },
  DEL_ITEM(state,id) {
   state.bookList.map((v,i)=> {
     if(v.id == id){
      state.bookList.splice(i,1)
     }
   })
  }
}
const actions = {
  add_item({commit},item) {
   commit('ADD_ITEM',item)
  },
  del_item({commit},id) {
   commit('DEL_ITEM',id)
  }
}
export default new Vuex.Store({
  state,mutations,actions
})
//Home.vue
<button @click='add_item'>ADD</button>
<p v-for='item in bookList' @click='delItem(item.id)'>{ {item.name} }<p/>

import { mapState, } from 'vuex';

computed: {
  ...mapState(['bookList'])
}
methods: {
  add_item() {
   let newObject = {id:this.bookList.length,name:'葫芦娃'}
   this.$store.dispatch('add_item',newObject)
  },
  delItem(id) {
   this.$store.dispatch('del_item',id)
  }
}

利用action派发mutation事件,实现增加和删除的操作

这里有一个很重要的概念: mutation是唯一修改state的方法,而action是操作mutation触发commit修改state的方式

4.使用getters过滤state数据

//vuex/index.js
const getters = {
  newBookList:function( state ){
   return JSON.parse(JSON.stringify(state.bookList)).splice(0,1)
  }
}

这样,我们在组件内部这样输出

mounted( ) {
  console.log(this.$store.getters.newBookList)
  console.log(this.bookList)
}

我们通过JSON拷贝,既可以得到过滤之后的state数据(1条数据),也可以得到原state数据(4条数据),个人理解,getters的作用就在这里

以上这篇Vuex实现数据增加和删除功能就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
用JavaScript获取网页中的js、css、Flash等文件
Dec 20 Javascript
javascript parseInt与Number函数的区别
Jan 21 Javascript
js一般方法改写成面向对象方法的无限级折叠菜单示例代码
Jul 04 Javascript
JS获取节点的兄弟,父级,子级元素的方法
Jan 09 Javascript
Jquery+ajax+JAVA(servlet)实现下拉菜单异步取值
Mar 23 Javascript
JavaScript ES5标准中新增的Array方法
Jun 28 Javascript
如何判断出一个js对象是否一个dom对象
Nov 24 Javascript
jQuery动态生成的元素绑定事件操作实例分析
May 04 jQuery
CountUp.js实现数字滚动增值效果
Oct 17 Javascript
15分钟学会vue项目改造成SSR(小白教程)
Dec 17 Javascript
Jquery如何使用animation动画效果改变背景色的代码
Jul 20 jQuery
vue实现锚点定位功能
Jun 29 Vue.js
VUE:vuex 用户登录信息的数据写入与获取方式
Nov 11 #Javascript
vue 实现通过vuex 存储值 在不同界面使用
Nov 11 #Javascript
使用vuex存储用户信息到localStorage的实例
Nov 11 #Javascript
JS中比较两个Object数组是否相等方法实例
Nov 11 #Javascript
vue把输入框的内容添加到页面的实例讲解
Nov 11 #Javascript
vue与django集成打包的实现方法
Nov 11 #Javascript
微信小程序监听用户登录事件的实现方法
Nov 11 #Javascript
You might like
Content-type 的说明
2006/10/09 PHP
一些使用频率比较高的php函数
2008/10/03 PHP
PHP缓存集成库phpFastCache用法
2014/12/15 PHP
php选择排序法实现数组排序实例分析
2015/02/16 PHP
php支持中文字符串分割的函数
2015/05/28 PHP
php获取远程文件大小
2015/10/20 PHP
PHP单例模式简单用法示例
2017/06/23 PHP
thinkPHP和onethink微信支付插件分享
2019/08/11 PHP
JS实现的鼠标跟随代码(卡通手型点击效果)
2015/10/26 Javascript
Vue + Webpack + Vue-loader学习教程之相关配置篇
2017/03/14 Javascript
Bootstrap实现基于carousel.js框架的轮播图效果
2017/05/02 Javascript
解决jQuery ajax动态新增节点无法触发点击事件的问题
2017/05/24 jQuery
webpack实现热加载自动刷新的方法
2017/07/30 Javascript
深入浅析ng-bootstrap 组件集中 tabset 组件的实现分析
2019/07/19 Javascript
python通过ssh-powershell监控windows的方法
2015/06/02 Python
Django中的“惰性翻译”方法的相关使用
2015/07/27 Python
Python批量合并有合并单元格的Excel文件详解
2018/04/05 Python
Python基于递归算法实现的汉诺塔与Fibonacci数列示例
2018/04/18 Python
python实现本地图片转存并重命名的示例代码
2018/10/27 Python
python实现多进程代码示例
2018/10/31 Python
python 求1-100之间的奇数或者偶数之和的实例
2019/06/11 Python
python实现人脸签到系统
2020/04/13 Python
python计算auc的方法
2020/09/09 Python
html5 canvas-1.canvas介绍(hello canvas)
2013/01/07 HTML / CSS
全民健身日活动方案
2014/01/29 职场文书
办公室岗位职责
2014/02/12 职场文书
三八红旗手先进事迹材料
2014/05/13 职场文书
上海世博会志愿者口号
2014/06/17 职场文书
祖国在我心中演讲稿200字
2014/08/28 职场文书
七一建党节演讲稿
2014/09/11 职场文书
南京市纪委监察局整改方案
2014/09/16 职场文书
人身损害赔偿协议书范本
2014/09/27 职场文书
2015年社区纪检工作总结
2015/04/21 职场文书
银行工作心得体会范文
2016/01/23 职场文书
JavaScript 语句之常用 for 循环详解
2021/03/29 Javascript
2022漫威和DC电影上映作品
2022/04/05 欧美动漫