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 相关文章推荐
Code:findPosX 和 findPosY
Dec 20 Javascript
js中判断文本框是否为空的两种方法
Jul 31 Javascript
jquery $.each()使用探讨
Sep 23 Javascript
javascript正则表达式中的replace方法详解
Apr 20 Javascript
HTML5+setCutomValidity()函数验证表单实例分享
Apr 24 Javascript
jQuery实现购物车表单自动结算效果实例
Aug 10 Javascript
浅谈JavaScript 覆盖原型以及更改原型
Aug 31 Javascript
Vue.js每天必学之组件与组件间的通信
Sep 08 Javascript
Javascript中JSON数据分组优化实践及JS操作JSON总结
Dec 22 Javascript
js blob类型url的视频下载问题的解决
Nov 29 Javascript
vue自定义指令限制输入框输入值的步骤与完整代码
Aug 30 Javascript
vue $mount 和 el的区别说明
Sep 11 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维护文件系统
2006/10/09 PHP
基于ubuntu下nginx+php+mysql安装配置的具体操作步骤
2013/04/28 PHP
深入浅析PHP7.0新特征(五大新特征)
2015/10/29 PHP
php实现贪吃蛇小游戏
2016/07/26 PHP
PHP请求Socket接口测试实例
2016/08/12 PHP
PHP中的use关键字及文件的加载详解
2016/11/28 PHP
Thinkphp5 自定义上传文件名的实现方法
2019/07/23 PHP
JS模块与命名空间的介绍
2013/03/22 Javascript
JS 弹出层 定位至屏幕居中示例
2014/05/21 Javascript
javascript自定义in_array()函数实现方法
2015/08/03 Javascript
javascript字符串函数汇总
2015/12/06 Javascript
jquery层级选择器的实现(匹配后代元素div)
2016/09/05 Javascript
JS实现线性表的顺序表示方法示例【经典数据结构】
2017/04/11 Javascript
.net MVC+Bootstrap下使用localResizeIMG上传图片
2017/04/21 Javascript
javascript回调函数详解
2018/02/06 Javascript
JS获取今天是本月第几周、本月共几周、本月有多少天、是今年的第几周、是今年的第几天的示例代码
2018/12/05 Javascript
vue.js仿hover效果的实现方法示例
2019/01/28 Javascript
如何阻止小程序遮罩层下方图层滚动
2019/09/05 Javascript
Vue组件通信入门之Provide和Inject机制
2019/12/29 Javascript
Vue优化:常见会导致内存泄漏问题及优化详解
2020/08/04 Javascript
[01:08:29]DOTA2-DPC中国联赛定级赛 RNG vs Aster BO3第一场 1月9日
2021/03/11 DOTA
Python Web框架Flask中使用新浪SAE云存储实例
2015/02/08 Python
Python3.6实现带有简单界面的有道翻译小程序
2019/04/16 Python
对PyQt5中的菜单栏和工具栏实例详解
2019/06/20 Python
python构建指数平滑预测模型示例
2019/11/21 Python
Python SMTP发送电子邮件的示例
2020/09/23 Python
HTML5 表单验证失败的提示语问题
2017/07/13 HTML / CSS
美国旅游网站:Tours4Fun
2017/02/17 全球购物
一套SQL笔试题
2016/08/14 面试题
大学生职业生涯规划书模板
2014/01/18 职场文书
中学生操行评语
2014/04/24 职场文书
村班子对照检查材料
2014/08/18 职场文书
80后婚前协议书范本
2014/10/24 职场文书
谢师宴答谢词
2015/01/05 职场文书
导游词之白茶谷九龙峡
2019/10/23 职场文书
Python 操作pdf pdfplumber读取PDF写入Exce
2022/08/14 Python