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延迟执行实现方法(setTimeout)
Dec 30 Javascript
40款非常棒的jQuery 插件和制作教程(系列一)
Oct 26 Javascript
JavaScript获取onclick、onchange等事件值的代码
Jul 22 Javascript
javascript禁制后退键(Backspace)实例代码
Nov 15 Javascript
JavaScript fontcolor方法入门实例(按照指定的颜色来显示字符串)
Oct 17 Javascript
JavaScript基于ajax编辑信息用法实例
Jul 15 Javascript
浅析JavaScript中浏览器的兼容问题
Apr 19 Javascript
jQuery深拷贝Json对象简单示例
Jul 06 Javascript
jQuery弹出下拉列表插件(实现kindeditor的@功能)
Aug 16 Javascript
微信小程序中this.data与this.setData的区别详解
Sep 17 Javascript
clipboard在vue中的使用的方法示例
Oct 19 Javascript
详解JavaScript之ES5的继承
Jul 08 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
3种平台下安装php4经验点滴
2006/10/09 PHP
强制PHP命令行脚本单进程运行的方法
2014/04/15 PHP
smarty模板引擎从php中获取数据的方法
2015/01/22 PHP
PHP数组的定义、初始化和数组元素的显示实现代码
2016/11/05 PHP
IE innerHTML,outerHTML所引起的问题
2009/06/04 Javascript
利用js 进行输入框自动匹配字符的小例子
2013/06/29 Javascript
js为空或不是对象问题的快速解决方法
2013/12/11 Javascript
JS实现的网页背景闪电闪烁效果代码
2015/10/17 Javascript
vue路由跳转时判断用户是否登录功能的实现
2017/10/26 Javascript
JavaScript面向对象程序设计创建对象的方法分析
2018/08/13 Javascript
JS中的算法与数据结构之栈(Stack)实例详解
2019/08/20 Javascript
vue element upload组件 file-list的动态绑定实现
2019/10/11 Javascript
Python中的pprint折腾记
2015/01/21 Python
python实现将pvr格式转换成pvr.ccz的方法
2015/04/28 Python
Python实现程序的单一实例用法分析
2015/06/03 Python
python实现查找两个字符串中相同字符并输出的方法
2015/07/11 Python
详解python之多进程和进程池(Processing库)
2017/06/09 Python
Python基于socket实现简单的即时通讯功能示例
2018/01/16 Python
利用python生成照片墙的示例代码
2020/04/09 Python
matplotlib 范围选区(SpanSelector)的使用
2021/02/24 Python
Canvas高级路径操作之拖拽对象的实现
2019/08/05 HTML / CSS
AmazeUI图片轮播效果的示例代码
2020/08/20 HTML / CSS
Oakley官网:运动太阳镜、雪镜和服装
2016/09/30 全球购物
印尼在线购买隐形眼镜网站:Lensza.co.id
2019/04/27 全球购物
土木工程专业个人求职信
2013/12/05 职场文书
高一英语教学反思
2014/01/22 职场文书
优秀党员获奖感言
2014/02/18 职场文书
小学语文国培感言
2014/03/04 职场文书
让生命充满爱演讲稿
2014/05/10 职场文书
工商管理专业自荐信
2014/06/03 职场文书
身边的榜样活动方案
2014/08/20 职场文书
2014年小学班主任工作总结
2014/11/08 职场文书
教师党员个人总结
2015/02/10 职场文书
给病人的慰问信
2015/03/23 职场文书
Django 实现jwt认证的示例
2021/04/30 Python
浅谈Python3中datetime不同时区转换介绍与踩坑
2021/08/02 Python