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 自动填写表单的实现方法
Apr 09 Javascript
一些常用且实用的原生JavaScript函数
Sep 08 Javascript
解决js正则匹配换行问题实现代码
Dec 10 Javascript
jquery中对于批量deferred的处理方法
Jan 22 Javascript
js实现点击文本框显示日期选择器特效代码分享
May 21 Javascript
jquery实现图片上传前本地预览功能
May 10 Javascript
bootstrap的常用组件和栅格式布局详解
May 02 Javascript
不到200行 JavaScript 代码实现富文本编辑器的方法
Jan 03 Javascript
Angularjs实现多图片上传预览功能
Jul 18 Javascript
layui实现table加载的示例代码
Aug 14 Javascript
微信小程序日历效果
Dec 29 Javascript
基于vue-cli3+typescript的tsx开发模板搭建过程分享
Feb 28 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设计模式 注册表模式
2012/02/05 PHP
php实现简单文件下载的方法
2015/01/30 PHP
详解PHP中的null合并运算符
2015/12/30 PHP
浅谈PHP中其他类型转化为Bool类型
2016/03/28 PHP
laravel手动创建数组分页的实现代码
2018/06/07 PHP
改进版通过Json对象实现深复制的方法
2012/10/24 Javascript
JS实现点击文字对应DIV层不停闪动效果的方法
2015/03/02 Javascript
在linux中使用包管理器安装node.js
2015/03/13 Javascript
js实现表单检测及表单提示的方法
2015/08/14 Javascript
jQuery幻灯片带缩略图轮播效果代码分享
2015/08/17 Javascript
js基于面向对象实现网页TAB选项卡菜单效果代码
2015/09/09 Javascript
javascript实现3D切换焦点图
2015/10/16 Javascript
微信小程序  modal弹框组件详解
2016/10/27 Javascript
浅谈layer的iframe弹窗给里面的标签赋值的问题
2016/11/10 Javascript
javascript删除html标签函数cIsHTML
2017/01/09 Javascript
jQuery插件HighCharts绘制2D带Label的折线图效果示例【附demo源码下载】
2017/03/08 Javascript
Vue2.0实现将页面中表格数据导出excel的实例
2017/08/09 Javascript
SVG动画vivus.js库使用小结(实例代码)
2017/09/14 Javascript
js实现单张图片平移切换效果
2017/10/11 Javascript
浅谈Webpack 持久化缓存实践
2018/03/22 Javascript
JavaScript判断浏览器版本的方法
2019/11/03 Javascript
vue的webcamjs集成方式
2020/11/16 Javascript
Python函数学习笔记
2008/10/07 Python
Python中的对象,方法,类,实例,函数用法分析
2015/01/15 Python
Pycharm学习教程(1) 定制外观
2017/05/02 Python
python3解析库BeautifulSoup4的安装配置与基本用法
2018/06/26 Python
python对离散变量的one-hot编码方法
2018/07/11 Python
Django 视图层(view)的使用
2018/11/09 Python
Python爬取破解无线网络wifi密码过程解析
2019/09/17 Python
Canvas制作旋转的太极的示例
2018/03/09 HTML / CSS
UNIX操作系统结构由哪几部分组成
2016/02/17 面试题
个人总结怎么写
2015/02/26 职场文书
2015年幼儿园学前班工作总结
2015/05/18 职场文书
python基于tkinter制作无损音乐下载工具
2021/03/29 Python
详解Vue的options
2021/05/15 Vue.js
vue elementUI表格控制对应列
2022/04/13 Vue.js