博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
vue+vuex初入门
阅读量:6229 次
发布时间:2019-06-21

本文共 3935 字,大约阅读时间需要 13 分钟。

Vuex

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。

解决问题:

  • 传参的方法对于多层嵌套的组件将会非常繁琐,并且对于兄弟组件间的状态传递无能为力。

  • 采用父子组件直接引用或者通过事件来变更和同步状态的多份拷贝。以上的这些模式非常脆弱,通常会导致无法维护的代码。

参考文档:

  • https://github.com/vuejs/vuex/tree/dev/examples/shopping-cart
  • https://vuex.vuejs.org/zh-cn/getting-started.html

数据流动

开始

让我们做一个添加列表的功能

目录结构

 
├── index.css├── index.js├── store│   ├── index.js│   ├── main.js│   └── modules│       └── card.js└── vue-mods    ├── card.vue    └── index.vue
 

定义store.js

 
import Vue from 'vue'import Vuex from 'vuex'​import card from "./modules/card.js";​//初始化storeexport default new Vuex.Store({    //store的子模块    modules : {        card    },    //定义状态    state : {        msg : "hello, this msg is from vuex.store",        name : "zhangjian",        location : "zhengjiang"    },    //设置状态的获取,可以做一些特殊的定制    getters : {        detail : state => {            return state.msg + state.name        }    },    //mutation,用来修改state    mutations : {        CHANGE_LOCATION (state, location = "beijing"){            state.location = location;        }    },    //事件处理,主要是由外部触发store    actions : {        changeLocation ({ commit, state }){            commit("CHANGE_LOCATION");//触发mutation        },        changeLocationAsync ({commit, state}, {location}){            setTimeout(function (){                commit("CHANGE_LOCATION", location);            }, 1000);        }    }});
 

modules/card.js ,和store.js和一致,只是输出的是一个模块

let state = {    list : [],    message : "this is card"}​let getters = {​}​let mutations = {    ADD_CARD (state, card){        state.list.unshift(card)    },    UPDATE_MESSAGE (state, message){        state.message = message;    },    DELETE_CARD_BY_INDEX (state, index){        state.list.splice(index, 1);    }}​let actions = {    addcard ({commit, state}, card){        let message = state.message;        let time = new Date().getTime();​        commit("ADD_CARD", {name : `${message} card - ${time}`})    },    updateMessage ({commit, state}, message){        commit("UPDATE_MESSAGE", message);    },    deleteCard ({commit, state}, index){        commit("DELETE_CARD_BY_INDEX", index);    }}​export default{    state, getters, mutations, actions}

入口文件 App.vue

子模块 card.vue

 

附上webpack.config.js

var webpack = require('webpack');var vue = require('vue-loader')var commonsPlugin = new webpack.optimize.CommonsChunkPlugin('common.js');var ExtractTextPlugin = require("extract-text-webpack-plugin"); module.exports = {    //插件项    plugins: [        new ExtractTextPlugin("[name].css")    ],    //页面入口文件配置    entry: {        index : './src/index.js'    },    //入口文件输出配置    output: {        path: './dist/',        filename: '[name].js'    },    module: {        //加载器配置        loaders: [            { test: /\.css$/, loader: ExtractTextPlugin.extract("css") },            { test: /\.less$/, loader: ExtractTextPlugin.extract("css!less") },            { test: /\.js$/, loader: "babel",query: {presets: ['es2015']},exclude: /node_modules/ },            { test: /\.vue$/, loader: 'vue'}        ]    },    vue : {      loaders: {        css: ExtractTextPlugin.extract("css"),        less: ExtractTextPlugin.extract("css!less")      },      autoprefixer: { browsers: ["ios_saf >= 7", "android >= 4"] }    },    externals: {        vue: "window.Vue",        vuex : "window.Vuex"    }};

注意:这里,我针对vue和vuex2个仓库,做了一个全局引用,这样打包出来的boundle不会太大。

 

 

转载于:https://www.cnblogs.com/xiaoniuzai/p/6144828.html

你可能感兴趣的文章
《Linux From Scratch》第一部分:介绍 第一章:介绍-1.1 如何构建LFS系统
查看>>
Sketch的过去现在和未来
查看>>
TableEdit UI_10
查看>>
[译] 通知是一种「暗模式」吗?
查看>>
企业在云迁移过程中需解决常见的IP地址问题
查看>>
AWS 张侠:为企业创新和转型提供助力
查看>>
阿里云王坚:运营才能缔造真正的云计算
查看>>
远程数据库的表超过20个索引的影响
查看>>
__attribute__ ((packed)) 的作用
查看>>
【Django】CentOS7安装Django笔记
查看>>
《Linux From Scratch》第三部分:构建LFS系统 第六章:安装基本的系统软件- 6.71. 再次清理无用内容...
查看>>
趋势科技CEO陈怡桦:敌人是谁?
查看>>
zabbix漏洞利用 Zabbix Server远程代码执行漏洞CVE-2017-2824 2.4.X均受影响
查看>>
带项目体会 合格的Leader 应该具备什么特质?
查看>>
Black Hat|黑客演示如何向卫星网络发送篡改信号
查看>>
揭秘中国数据库研究鲜为人知的那些事
查看>>
新年伊始你需要做的10个管理任务
查看>>
【安全课堂】七种武器把黑客拒之门外
查看>>
LaCie Mirror:科技与设计的交融
查看>>
很有意思,如何把代码看成一个犯罪现场
查看>>