vue2actions,mutations模块最终导出的时候newVuex.Store小写

图片[1]-vue2actions,mutations模块最终导出的时候newVuex.Store小写-唐朝资源网

背景:

vue2.x项目组件的工程数据逐层传输,太麻烦了。如下图: 内层在家时,父组件的数据需要逐层传输。组件加载数据到父组件时,需要逐层返回,增加了页面的负担。因此引入了vuex状态管理来统一分发和部署。提取组件中的状态,放入Vuex统一管理。

图片[2]-vue2actions,mutations模块最终导出的时候newVuex.Store小写-唐朝资源网

这样他们就变成了一级关系:

图片[3]-vue2actions,mutations模块最终导出的时候newVuex.Store小写-唐朝资源网

Vuex其实就是一个套路(学习运行机制就可以了)

官方网站:

网址:

手绘插图:

图片[4]-vue2actions,mutations模块最终导出的时候newVuex.Store小写-唐朝资源网

需要:

获取数据:

1.components(组件)把数据取出来渲染到界面上,改变里面的数据。

2.全局注册后,$state.state直接取数据或者放到map中再取数据。

更改数据:

1.dispath()方法触发actions,调用action改变数据,但是action没有改变的权限,只能向上级报告(mutations),通过commit()提交。并且行动中的行为和变异的行为应该是相同的。

2. 为了防止出错vuex存放全局变量,统一了常量(mutation-types),在使用方法的时候调用对应的常量。

3. 提交动作,由 commit() 触发突变,并更新状态。

数据的单独处理吸气剂:

例如,该州有价格处理。过滤之后,过滤器变成一个单独的函数,封装成getters中的get方法,然后在组件上直接调用$state.getters。

准备:

在 vue 项目中新建一个文件。如下所示:

图片[5]-vue2actions,mutations模块最终导出的时候newVuex.Store小写-唐朝资源网

安装 vuex:cmd

npm install vuex --save

导入使用:store/index.js

import Vue from 'vue';
import Vuex from 'vuex';
Vue use(Vuex);

对外暴露vuex并引入对应文件:store/index.js

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

import actions from './actions';
import getters from './getters';
import mutations from './mutations';
import state from './state';
Vue.use(Vuex);
export default new Vuex.Store({

state,
mutations,
getters,
actions
})

这里Store的s要大写

否则会报错:TypeError: WEBPACK_IMPORTED_MODULE_1_vuex.a.store is not a constructor

这个错误是 _vuex2.default.store 不是构造函数vuex存放全局变量,因为当我们使用 vuex 时,我们需要导出我们将使用的动作和突变模块。导出时,新的 Vuex.Store 中的 Store 是小写的。,这里一定要大写,相当于我们使用构造函数(类)的时候首字母大写

全局使用 vuex

全局注册:main.js

import store from './store';
/* eslint-disable no-new */
new Vue({

el: '#app',
store, //挂载
render: h => h(App)
// components: {
 App },
// template: ''
});

**实际应用:**现在有一条数据不属于任何组件。Vuex 管理状态。谁要数据,谁就直接在第一层取,不需要组件的层级传递。Vuex 实现了数据的加法功能。

数据存储(任何类型):store/state.js

// 存放所有的状态,唯一的数据源
export default {


todos: [
{
title:'坐下来好好聊聊天', finished: false},
{
title:'和你一起的旅游', finished: false},
{
title:'回家熬夜敲代码', finished: true},
]
}

应用程序.vue:

<template>
<div class="">
</div>
</template>
<script>
import Header from './components/xxx/xxx'
export default {

name: "App",
data(){

return {

//store/state.js
}
},
components:{

xxx
},
methods:{


// 插入一条记录
addTodo(todo){

this.todos.unshift(todo);
},
//清空所有
delFinishedTodos(){

//filter方法
this.todos = this.todos.filter(todo => !todo.finished)
}
}
}
</script>
<style scoped>
</style>

组件/xxx.vue:

<template>
<div>
<input type="text"
placeholder="请输入今天的任务清单,按回车键确认"
v-model="title"
@keyup.enter="addItem" />
</div>
</template>
<script>
export default{

name:"xxx",
props:{

addTodo:Function
},

data(){

return{

title:''
}
},
methods:{

addItem(){

//判断是否合理
const title = this.title.trim(); //清空所有的输入空格
if(!title){

alert('请输入内容不能为空');
return;
}
//生成todo对象
const todo = {
title,finshed: false};
//调用方法
// this.addTodo(todo);
this.$store.dispatch('addTodo',todo);
//清空输入
this.title = ''
}
}
}
</script>
<style scoped>
</style>

组件调用数据的方法:components/xxx.vue

this.$store.dispatch('addTodo',todo);

实现方式:store/actions.js

action调用mutations的方法必须保证两者的函数名相同,并且需要第三方来保证:mutation-types是暴露的。

存储/突变-types.js:

// 存放一些常量
export const ADD_TODO = 'add_todo';//添加一条记录

存储/突变.js:

// 存放一些常量
import {

ADD_TODO
} from './mutations-types'
export default{

//转字符串为变量,更新数据。
[ADD_TODO](state, {
todo}){

state.todos.unshift(todo);
}
}

查看数据状态:

谷歌浏览器:需要安装 devtools 插件

%20 开发工具

图片[6]-vue2actions,mutations模块最终导出的时候newVuex.Store小写-唐朝资源网

更新数据:

在输入框中输入数据进行添加:

图片[7]-vue2actions,mutations模块最终导出的时候newVuex.Store小写-唐朝资源网

vuex和localstorage存储数据有什么区别完全是两件事,vuex是vue中的一种状态管理机制,方便组件之间的通信;而localstorage是本地存储,是浏览器中存储数据的一种方式,通常在跨页面传递数据时使用。它们是两种完全不同的东西。Vuex用于状态管理,是一种组件数据共享。一个组件的数据更改将映射到使用该数据的其他组件。说到localstorage,就是H5提供的一种比较简单的数据存储方式。之前是存储在cookies中,但是cookies存储的数据量太少,界面繁琐。localstorage的数据可以有5M的限制,相当大,并且该api非常简单易记且易于使用。我相信它会成为未来的主流。Vuex存储状态,代表视图对应的数据,存储位置在内存中;localstorage 是浏览器提供的一个接口,可以让你在电脑上存储文件和磁盘,当然你也可以在本地存储状态!localStorage 是持久化存储,可以跨多个页面共享

localStorage不能很好的和Vue结合,修改后不会触发View的响应式变化

没有localStorage修改的记录,不利于调试和回溯xsf——1991已经说到位了。我再补充一点,如果你的 dispatch 触发了当前路由中没有写入的 vuex 并刷新了页面,那么之前存储在 vuex 中的数据就会被初始化。,vuex中的数据会丢失。总结:

刚开始学习vuex有点迷茫,但是知道了它的运行机制,并且应用到了例子中。

图片[8]-vue2actions,mutations模块最终导出的时候newVuex.Store小写-唐朝资源网

© 版权声明
THE END
喜欢就支持一下吧
点赞34赞赏 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容