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 对象成员的可见性说明
Oct 16 Javascript
Jquery 的扩展方法总结
Oct 01 Javascript
网站如何做到完全不需要jQuery也可以满足简单需求
Jun 27 Javascript
原生js事件的添加和删除的封装
Jul 01 Javascript
JS实现文字向下滚动完整实例
Feb 06 Javascript
jQuery实现的左右移动焦点图效果
Jan 14 Javascript
原生js实现放大镜特效
Mar 08 Javascript
vue中eventbus被多次触发以及踩过的坑
Dec 02 Javascript
vue-cli2.9.3 详细教程
Apr 23 Javascript
vue 做移动端微信公众号采坑经验记录
Apr 26 Javascript
Vue如何实现监听组件原生事件
Jul 03 Javascript
JS变量提升及函数提升实例解析
Sep 03 Javascript
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
用PHP制作静态网站的模板框架
2006/10/09 PHP
PHPMailer邮件类利用smtp.163.com发送邮件方法
2008/09/11 PHP
PHP调用Twitter的RSS的实现代码
2010/03/10 PHP
PHP中spl_autoload_register函数的用法总结
2013/11/07 PHP
详解PHP实现定时任务的五种方法
2016/07/25 PHP
PHP耦合设计模式实例分析
2018/08/08 PHP
PHP配置ZendOpcache插件加速
2019/02/14 PHP
jQuery不间断滚动效果(模拟百度新闻支持文字/图片/垂直滚动)
2013/02/05 Javascript
jquery实现图片裁剪思路及实现
2013/08/16 Javascript
浅谈javascript函数式编程
2015/09/06 Javascript
原生js仿jquery animate动画效果
2016/07/13 Javascript
angular.js 路由及页面传参示例
2017/02/24 Javascript
vue与原生app的对接交互的方法(混合开发)
2018/11/28 Javascript
利用JS如何获取form表单数据
2019/12/19 Javascript
微信小程序入门之指南针
2020/10/22 Javascript
[57:09]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第一场 1月26日
2021/03/11 DOTA
Python中第三方库Requests库的高级用法详解
2017/03/12 Python
python3中set(集合)的语法总结分享
2017/03/24 Python
python中返回矩阵的行列方法
2018/04/04 Python
python super用法及原理详解
2020/01/20 Python
python 追踪except信息方式
2020/04/25 Python
Python 实现将numpy中的nan和inf,nan替换成对应的均值
2020/06/08 Python
Python多分支if语句的使用
2020/09/03 Python
教你使用Sublime text3搭建Python开发环境及常用插件安装另分享Sublime text3最新激活注册码
2020/11/12 Python
Python WebSocket长连接心跳与短连接的示例
2020/11/24 Python
美国汽配连锁巨头Pep Boys官网:轮胎更换、汽车维修服务和汽车零部件
2017/01/14 全球购物
英国在线自行车店:Merlin Cycles
2018/08/20 全球购物
C++面试题:关于链表和指针
2013/06/05 面试题
创建市级文明单位实施方案
2014/03/01 职场文书
群众路线教育实践活动批评与自我批评
2014/09/15 职场文书
房产协议书范本2014
2014/09/30 职场文书
党的群众路线教育实践活动总结
2014/10/30 职场文书
2015年学校禁毒工作总结
2015/05/27 职场文书
2016孝老爱亲模范事迹材料
2016/02/26 职场文书
2019学校运动会开幕词
2019/05/13 职场文书
只用Python就可以制作的简单词云
2021/06/07 Python