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 new 需不需要继续使用
Jul 02 Javascript
纯JavaScript实现的兼容各浏览器的添加和移除事件封装
Mar 28 Javascript
JS与jQuery遍历Table所有单元格内容的方法
Dec 07 Javascript
js仿微博实现统计字符和本地存储功能
Dec 22 Javascript
不得不分享的JavaScript常用方法函数集(上)
Dec 23 Javascript
数据结构中的各种排序方法小结(JS实现)
Jul 23 Javascript
详解Javascript中DOM的范围
Feb 13 Javascript
JS的函数调用栈stack size的计算方法
Jun 24 Javascript
使用layer弹窗和layui表单实现新增功能
Aug 09 Javascript
vue组件间通信六种方式(总结篇)
May 15 Javascript
js实现GIF动图分解成多帧图片上传
Oct 24 Javascript
解决vue项目,npm run build后,报路径错的问题
Aug 13 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正则走开
2008/03/15 PHP
php eval函数用法总结
2012/10/31 PHP
深入分析php中接口与抽象类的区别
2013/06/08 PHP
PHP连接MySQL查询结果中文显示乱码解决方法
2013/10/25 PHP
php mysql 封装类实例代码
2016/09/18 PHP
PHP中关键字interface和implements详解
2017/06/14 PHP
PHP大文件分割上传 PHP分片上传
2017/08/28 PHP
PHP 计算至少是其他数字两倍的最大数的实现代码
2020/05/26 PHP
Sample script that deletes a SQL Server database
2007/06/16 Javascript
Javascript 检测、添加、移除样式(className)函数代码
2009/09/08 Javascript
在JQuery dialog里的服务器控件 事件失效问题
2010/12/08 Javascript
jQuery提示插件alertify使用指南
2015/04/21 Javascript
javascript伸缩型菜单实现代码
2015/11/16 Javascript
jQuery实现判断控件是否显示的方法
2017/01/11 Javascript
原生js轮播(仿慕课网)
2017/02/15 Javascript
Three.js如何用轨迹球插件(trackball)增加对模型的交互功能详解
2017/09/25 Javascript
解决vue中修改export default中脚本报一大堆错的问题
2018/08/27 Javascript
通过实例学习React中事件节流防抖
2019/06/17 Javascript
原生js实现日历效果
2020/03/02 Javascript
c++生成dll使用python调用dll的方法
2014/01/20 Python
总结网络IO模型与select模型的Python实例讲解
2016/06/27 Python
实例讲解Python爬取网页数据
2018/07/08 Python
在python中实现强制关闭线程的示例
2019/01/22 Python
Python实现简单的列表冒泡排序和反转列表操作示例
2019/07/10 Python
python Gunicorn服务器使用方法详解
2019/07/22 Python
基于nexus3配置Python仓库过程详解
2020/06/15 Python
六种酷炫Python运行进度条效果的实现代码
2020/07/17 Python
python 实现图片裁剪小工具
2021/02/02 Python
澳大利亚最受欢迎的超级商场每日优惠:Catch
2020/11/17 全球购物
实习鉴定范文
2013/12/19 职场文书
企业宣传标语
2014/06/09 职场文书
2014年信访维稳工作总结
2014/12/08 职场文书
2015年新教师工作总结
2015/04/28 职场文书
2019通用版导游词范本!
2019/08/07 职场文书
浅谈css实现背景颜色半透明的两种方法
2021/12/06 HTML / CSS
Java中生成微信小程序太阳码的实现方案
2022/06/01 Java/Android