萌新 学习 vuex
vuex官网文档 https://vuex.vuejs.org/zh-cn/
注: Mutation事件使用commit触发, Actions事件使用dispatch触发
安装 npm install vuex --save
创建store文件/store.js
// store.js
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
let state = {
// 管理所有数据
name: 'default name'
}
let mutations = {
// 如需要修改state, 全部方法集中在这管理
change(state, name){
state.name = name
}
}
let actions = {
// 组件所有的 异步,同步事件在这里处理
change({commit}){
var name = 'ajanuw'
commit('change', name);// 需要修改state.name交更mutations处理
}
}
let getters = {
// 组件需要 state数据全部在这里请求
getName(state){
return state.name
}
}
// 导出
export default new Vuex.Store({
actions,
getters,
mutations,
state
})
main.js 获取store
// main.js
import store from './store/store.js'
new Vue({
store
})
组件内部
// App.vue
<template>
<div id="app">
<p>{{ getName}}</p>
<button @click="change"> change name</button>
</div>
</template>
<script>
import {mapGetters, mapActions} from 'vuex'
export default {
computed: mapGetters([
'getName'
]),
methods: mapActions([
'change'
])
}
</script>
分离store.js
└─store
actions.js
getters.js
mutations.js
state.js
store.js
---
// store.js
import Vue from 'vue'
import Vuex from 'vuex'
import state from './state'
import mutations from './mutations'
import actions from './actions'
import getters from './getters'
Vue.use(Vuex)
// 导出
export default new Vuex.Store({
actions,
getters,
mutations,
state
})
---
// state.js
export default {
// 管理所有数据
name: 'default name'
}
补充一个 mapState
// App.js
import {mapGetters, mapActions, mapState} from 'vuex'
computed: mapState({
age: 'age', // 映射 state.age
tody(){// 定义局部数据
return "好日子"
},
storeName(state){// this指向局部
return `${state.name} ${this.name}`
}
}),
render(h){
return (
<p>{ this.age }</p>
<p>{ this.tody }</p>
<p>{ this.storeName }</p>
);
}
一些vuex操作, dispatch
// App.js
import {mapState, mapGetters, mapActions} from 'vuex'
export default {
data(){
return {
name: 'ajanuw'
}
},
computed:{
...mapState({
defaultname: 'name',
num: 'num'
})
},
methods:{
hello(msg){
return `hello ${msg}`
},
...mapActions({// 映射store里面的action.prop
decrease: 'decrease'
})
},
render(){
var store = this.$store;
return (
<div id="app">
/*methods钩子的的函数*/
<p>{ this.hello('vue vuex jsx') }</p>
<br />
/*data钩子里的的state*/
<p>hello {this.name}</p>
<br />
/*映射store里面的state*/
<p>{this.defaultname}</p>
<br />
/*store.dispatch() 派发事件*/
<p>
<button onClick={ ()=>store.dispatch('addnum', 1) } >click延迟一秒+1 => {this.num}</button>
</p>
<br />
/* 使用mapActions() 映射store的action*/
<p>
<button onClick={ ()=> this.decrease(2) } >click延迟一秒-2 => {this.num}</button>
</p>
<br />
</div>
)
},
mounted(){
console.log( this);
}
}
// store.js
import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);
let state = {
name: 'default name',
num: 0
}
let mutations = {
addnum(state, n){
state.num += n;
},
decrease(state, n){
state.num -= n;
}
}
let actions = {
addnum(ctx, n){
setTimeout( ()=> ctx.commit('addnum', n), 1000);
},
decrease(ctx, n){
setTimeout( ()=> ctx.commit('decrease', n), 1000);
}
}
let getters = {
}
export default new Vuex.Store({
actions,
getters,
mutations,
state
});
module 分割store https://vuex.vuejs.org/zh-cn/modules.html
// App.js
import {mapState, mapGetters, mapActions} from 'vuex';
export default {
data(){
return {}
},
created(){
this.$store.registerModule('modelC', {
// 动态注册一个model
// store.unregisterModule(moduleName) 来动态卸载模块
namespaced: true,
state: {
msg: '动态modelC'
}
});
},
methods:{
...mapActions('modelA', {
show: 'show'
})
},
render(){
const store = this.$store;
return (
<div id="app">
<p>hello</p>
<p onClick={()=>store.dispatch('modelA/show')}>modelA => {store.state.modelA.msg}</p>
<p onClick={ ()=>store.dispatch('modelB/show') }>modelB => {store.state.modelB.msg}</p>
</div>
)
},
mounted(){
this.show();
console.log( this.$store.state.modelC.msg );
this.$store.unregisterModule(modelC);
// modelC 已经被卸载,下面的代码将会报错
console.error( this.$store.state.modelC.msg );
}
}
// store.js
import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);
/*
默认情况下,模块内部的 action、mutation 和 getter 是注册在全局命名空间的
这样使得多个模块能够对同一 mutation 或 action 作出响应。
如果希望你的模块具有更高的封装度和复用性,
你可以通过添加 namespaced: true 的方式使其成为命名空间模块。
当模块被注册后,它的所有 getter、action 及 mutation 都会自动根据模块注册的路径调整命名
*/
const modelA = {
namespaced: true,
state: {
msg: 'this is modelA',
},
mutations: {},
actions: {
show(ctx){
console.log( ctx.state.msg );
}
},
getters: {}
}
const modelB = {
namespaced: true,
state: {
msg: 'this is modelB',
},
mutations: {},
actions: {
show(ctx){
console.log( ctx.state.msg );
}
},
getters: {}
}
const store = new Vuex.Store({
modules: {
modelA,
modelB
}
});
export default store;
萌新 学习 vuex的更多相关文章
- 萌新学习Python爬取B站弹幕+R语言分词demo说明
代码地址如下:http://www.demodashi.com/demo/11578.html 一.写在前面 之前在简书首页看到了Python爬虫的介绍,于是就想着爬取B站弹幕并绘制词云,因此有了这样 ...
- php萌新|学习|排坑|のmysqli_error()方法的妙用
从开始学习php当现在已经有一个月多.除了每天完成公司布置的日常汇报,也没有耐下性子写一写自己想写的东西.今天就当起个头,坚持一周有个两三片文章或者小总结,也不枉费自己的付出.(我自己都不信,你会信吗 ...
- 萌新学习SpringMVC
前言 只有光头才能变强. 文本已收录至我的GitHub精选文章,欢迎Star:https://github.com/ZhongFuCheng3y/3y 这篇SpringMVC被催了很久了,这阵子由于做 ...
- 萌新学习图的强连通(Tarjan算法)笔记
--主要摘自北京大学暑期课<ACM/ICPC竞赛训练> 在有向图G中,如果任意两个不同顶点相互可达,则称该有向图是强连通的: 有向图G的极大强连通子图称为G的强连通分支: Tarjan算法 ...
- IIFE 萌新学习笔记
立即执行函数表达式(IIFE) IIFE:Immediately-Invoked Function Expression(立即执行函数表达式) 一 常用写法: //经常使用的写法(function() ...
- 萌新笔记——C++里创建 Trie字典树(中文词典)(三)(联想)
萌新做词典第三篇,做得不好,还请指正,谢谢大佬! 今天把词典的联想做好了,也是比较low的,还改了之前的查询.遍历等代码. Orz 一样地先放上运行结果: test1 ID : char : 件 w ...
- 萌新笔记——C++里创建 Trie字典树(中文词典)(二)(插入、查找、导入、导出)
萌新做词典第二篇,做得不好,还请指正,谢谢大佬! 做好了插入与遍历功能之后,我发现最基本的查找功能没有实现,同时还希望能够把内存的数据存入文件保存下来,并可以从文件中导入词典.此外,数据的路径是存在配 ...
- 萌新笔记——C++里创建 Trie字典树(中文词典)(一)(插入、遍历)
萌新做词典第一篇,做得不好,还请指正,谢谢大佬! 写了一个词典,用到了Trie字典树. 写这个词典的目的,一个是为了压缩一些数据,另一个是为了尝试搜索提示,就像在谷歌搜索的时候,打出某个关键字,会提示 ...
- 萌新关于C#委托一点见解
开博第一写C#委托(一个简单的委托) 1.关于委托,一直是学习c#的萌新们的噩梦,小生也是.最近在学委托感觉瞬间被虐成狗,但作为C#中极为重要的一个内容,学好了将会及大地减少我们的代码量,而且这也是够 ...
随机推荐
- MySQL体系结构图详解
体系结构图如下: 连接层 思想为解决资源的频繁分配﹑释放所造成的问题,为数据库连接建立一个“缓冲池”.原理预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕 ...
- mac 下apache服务的根目录
根据文章的介绍 http://jingyan.baidu.com/article/67508eb434539f9cca1ce4da.html apache服务的根目录是在 /Library/WebSe ...
- JavaScript 同步异步示意图
- 关于Gerrit code review 介绍与安装
代码审核(Code Review)是软件研发质量保障机制中非常重要的一环,但在实际项目执行过程中,却因为种种原因被Delay甚至是忽略.在实践中,给大家推荐一款免费.开放源代码的代码审查软件Gerri ...
- 【C#】C#线程_I/O限制的异步操作
目录结构: contents structure [+] 为什么需要异步IO操作 C#的异步函数 async和await的使用 async和Task的区别 异步函数的状态机 异步函数如何转化为状态机 ...
- [转]Ubuntu18.04搜狗拼音输入法候选栏乱码解决方法
经常碰到安装完搜狗拼音输入法后候选栏是乱码的情况,解决方法如下: 输入如下命令: cd ~/.config sudo rm -rf SogouPY* sogou* 1 2 之后重启即可. 安装过程可参 ...
- 安卓自己定义View进阶-Path基本操作
版权声明:本人全部文章均採用 [知识共享 署名-非商业性使用-禁止演绎 4.0 国际 许可协议] 转载前请保证理解此协议,原文出处 :http://www.gcssloop.com/#blog htt ...
- ASP.NET CORE 中用单元测试测试控制器
之前用ASP.NET CORE做的项目 加了一个新功能,数据库加了个字段balabala.... 更新到服务器上,新功能测试正常,然后就没管了..... 今天客户说网站有BUG,某个页面打开后出错了, ...
- Atitit 管理的模式扁平化管理 金字塔 直线型管理 垂直管理 水平管理 矩阵式管理 网状式样管理 多头管理 双头管理
Atitit 管理的模式扁平化管理 金字塔 直线型管理 垂直管理 水平管理 矩阵式管理 网状式样管理 多头管理 双头管理 1.1. 矩阵管理 1 1.2. 相关信息 矩阵的历史 1 1.3. 基于“ ...
- 强化学习-MDP(马尔可夫决策过程)算法原理
1. 前言 前面的强化学习基础知识介绍了强化学习中的一些基本元素和整体概念.今天讲解强化学习里面最最基础的MDP(马尔可夫决策过程). 2. MDP定义 MDP是当前强化学习理论推导的基石,通过这套框 ...