vuex 解决报错this.$store.commit is not a function的方法


Posted in Javascript onDecember 17, 2018

Vue的项目中,如果项目简单, 父子组件之间的数据传递可以使用 props 或者 $emit 等方式 进行传递

但是如果是大中型项目中,很多时候都需要在不相关的平行组件之间传递数据,并且很多数据需要多个组件循环使用。这时候再使用上面的方法会让项目代码变得冗长,并且不利于组件的复用,提高了耦合度。

Vue 的状态管理工具 Vuex 完美的解决了这个问题。

看了下vuex的官网,觉得不是很好理解,有的时候我们只是需要动态的从一个组件中获取数据(官网称为“组件层级”:是个独立的控件,作用范围只在组件之内)然后想放到一个被官网称作“应用层级”(在项目的任意地方都可以随时获取和动态的修改,在修改之后,vue会为你的整个项目做更新)的地方。这是我最初来学习vue的原因,我并不想做一个前端数据结构库。。。

下面看看我一步一步的小例子

首先安装vuex 目前公司项目已经被我从vue1.0迁移到vue2.0,下载并安装vue

npm install vuex --save

然后在index.html同级新建文件夹store,在文件夹内新建index.js文件,这个文件我们用来组装模块并导出 store 的文件

【一、获取store中的数据】

import Vue from 'vue'
import Vuex from 'vuex'

// 告诉 vue “使用” vuex
Vue.use(Vuex)

// 创建一个对象来保存应用启动时的初始状态
// 需要维护的状态
const store = new Vuex.Store({
 state: {
  // 放置初始状态 app启动的时候的全局的初始值
  bankInf: {"name":"我是vuex的第一个数据","id":100,"bankName":"中国银行"}
 }
})
// 整合初始状态和变更函数,我们就得到了我们所需的 store
// 至此,这个 store 就可以连接到我们的应用中
export default store

在vue根文件中注册store,这样所有的组件都可以使用store中的数据了

我的项目文件结构:

vuex 解决报错this.$store.commit is not a function的方法

在main.js文件中注册store

import Vue from 'vue'
import App from './App'
import router from './router'
import store from './../store/index'

/* eslint-disable no-new */
new Vue({
 el: '#app',
 router,
 store,
 template: '<App/>',
 components: { App }
})

这样简单的第一步就完成了,你可以再任意组件中使用store中的数据,使用方法也很简单,就是使用计算属性返回store中的数据到一个新属性上,然后在你模板中则可以使用这个属性值了:

任意组件中:

export default {
 ...
 computed: {
  bankName() {
   return this.$store.state.bankInf.bankName;
  }
 },
 ...
}

在模板中可以直接使用bankName这个属性了,也就是store中的中国银行

【二、在组件中修改store中的状态 】

在任意组件中添加html模板

<div class="bank">
  <list-header :headerData="bankName"></list-header>
  04银行详情页面
  <input name="" v-model="textValue">
  <button type="button" name="获取数据" @click="newBankName"></button>
</div>

然后组件中提交mutation

export default {
 ...
 computed: {
  bankName() {
   return this.$store.state.bankInf.bankName;
  }
 },
 methods: {
  newBankName: function() {
   this.$store.commit('newBankName', this.textValue)
  }
 }
 ...  
}

在store中的index.js中添加mutations:

const store = new Vuex.Store({
 state: {
  // 放置初始状态 app启动的时候的全局的初始值
  bankInf: {"name":"我是vuex的第一个数据","id":100,"bankName":"中国银行"},
  count:0
 },
 mutations: {
  newBankName(state,msg) {
   state.bankInf.bankName = msg;
  }
 }
})

这样你发现,在点击提交按钮的时候,页面已经显示你修改的数据了,并且所有复用这个组件的地方的数据全都被vue更新了;

如果在使用中发现报错this.$store.commit is not a function ,请打开你项目的配置文件package.json,查看你正在使用的vuex的版本,我正在使用的是vuex2.0,

如果想删除旧版本的vuex并安装新版本的vuex请使用

npm rm vuex --save

然后安装最新的vuex

npm install vuex --save

即可解决这个错误,或者是查看vuex官网api修改提交mutation的语句

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
用tip解决Ext列宽度不够的问题
Dec 13 Javascript
jQuery实现用方向键控制层的上下左右移动
Jan 13 Javascript
js判断屏幕分辨率的代码
Jul 16 Javascript
浅谈 jQuery 事件源码定位问题
Jun 18 Javascript
javascipt:filter过滤介绍及使用
Sep 10 Javascript
详解jQuery中的deferred对象的使用(一)
May 27 Javascript
微信小程序实现移动端滑动分页效果(ajax)
Jun 13 Javascript
微信小程序自定义音乐进度条的实例代码
Aug 28 Javascript
基于Vue SEO的四种方案(小结)
Jul 01 Javascript
vue递归组件实战之简单树形控件实例代码
Aug 27 Javascript
适合前端Vue开发童鞋的跨平台Weex的使用详解
Oct 16 Javascript
js实现飞机大战小游戏
Aug 26 Javascript
详解Vue This$Store总结
Dec 17 #Javascript
vue + element-ui的分页问题实现
Dec 17 #Javascript
Vue 中的受控与非受控组件的实现
Dec 17 #Javascript
js实现移动端轮播图
Dec 21 #Javascript
微信小程序登录按钮遮罩浮层效果的实现方法
Dec 16 #Javascript
微信小程序 JS动态修改样式的实现方法
Dec 16 #Javascript
Echart折线图手柄触发事件示例详解
Dec 16 #Javascript
You might like
PHP实现返回JSON和XML的类分享
2015/01/28 PHP
详解PHP数组赋值方法
2015/11/07 PHP
PHP 中TP5 Request 请求对象的实例详解
2017/07/31 PHP
Laravel框架处理用户的请求操作详解
2019/12/20 PHP
PHP实现创建一个RPC服务操作示例
2020/02/23 PHP
JS版网站风格切换实例代码
2008/10/06 Javascript
js 事件处理函数间的Event物件是否全等
2011/04/08 Javascript
深入理解JavaScript系列(13) This? Yes,this!
2012/01/18 Javascript
javascript的字符串按引用复制和传递,按值来比较介绍与应用
2012/12/28 Javascript
javascript真的不难-回顾一下基础知识
2013/01/15 Javascript
Extjs中ComboBoxTree实现的下拉框树效果(自写)
2013/05/28 Javascript
使用node.js 获取客户端信息代码分享
2014/11/26 Javascript
JS实现密码框根据焦点的获取与失去控制文字的消失与显示效果
2015/11/26 Javascript
Vue 2.X的状态管理vuex记录详解
2017/03/23 Javascript
JS通过调用微信API实现微信支付功能的方法示例
2017/06/29 Javascript
jquery插件canvaspercent.js实现百分比圆饼效果
2017/07/18 jQuery
使用Electron构建React+Webpack桌面应用的方法
2017/12/15 Javascript
微信小程序时间轴实现方法示例
2019/01/14 Javascript
vue 左滑删除功能的示例代码
2019/01/28 Javascript
微信小程序如何修改本地缓存key中单个数据的详解
2019/04/26 Javascript
SSM+layUI 根据登录信息显示不同的页面方法
2019/09/20 Javascript
使用zrender.js绘制体温单效果
2019/10/31 Javascript
TensorFlow的权值更新方法
2018/06/14 Python
Python3 JSON编码解码方法详解
2019/09/06 Python
浅析python 动态库m.so.1.0错误问题
2020/05/09 Python
python的Jenkins接口调用方式
2020/05/12 Python
基于Python实现粒子滤波效果
2020/12/01 Python
python爬虫爬取图片的简单代码
2021/01/18 Python
美国顶级户外凉鞋品牌:Chacos
2017/03/27 全球购物
adidas澳大利亚官方网站:adidas Australia
2018/04/15 全球购物
意大利独特而优质的家居用品:Fazzini
2018/12/05 全球购物
品学兼优的大学生自我评价
2013/09/20 职场文书
党的群众路线教育实践活动总结报告
2014/04/28 职场文书
2014领导班子“四风问题”对照检查材料思想汇报(执法局)
2014/09/21 职场文书
2014年十八届四中全会思想汇报范文
2014/10/17 职场文书
机械原理课程设计心得体会
2016/01/15 职场文书