vuex的简单实用


vuex官方文档: 点击打开链接

1、Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式
    (1).vuex解决了组件之间同一状态的共享问题  (解决了不同组件之间的数据共享)
    (2).组件里面数据的持久化。                

小项目尽量不要使用用vuex   

2、vuex的使用:
     (1).src目录下面新建一个vuex的文件夹
     (2).vuex 文件夹里面新建一个store.js
3、安装vuex  
cnpm install vuex --save
4、在刚才创建的store.js引入vue  引入vuex 并且use vuex

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

Vue.use(Vuex)

5、定义数据

/*1.state在vuex中用于存储数据*/
var state={


    count:1
}
6、定义方法 mutations里面放的是方法,方法主要用于改变state里面的数据


var mutations={


    incCount(){


++state.count;
    }
}
暴露给外部使用
const store = new Vuex.Store({
    state,
    mutations
})
export default store;

7、组建里面使用vuex:

(1).引入 store
 import store from '../vuex/store.js';
(2).注册
export default{
data(){
    return {               
       msg:'我是一个home组件',
value1: null,
     
    }
},
store,
methods:{
    incCount(){
      
this.$store.commit('incCount');   /*触发 state里面的数据*/
    }


}
    }
     (3).获取state里面的数据  
this.$store.state.数据

(4).触发 mutations 改变 state里面的数据

this.$store.commit('incCount');

8、实例代码:

    (1).src/vuex/store.js

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

Vue.use(Vuex);


/*1.state在vuex中用于存储数据*/
var state={

    count:1
}

/*2.mutations里面放的是方法,方法主要用于改变state里面的数据
*/
var mutations={

    incCount(){

        ++state.count;
    }
}

//vuex  实例化 Vuex.store
const store = new Vuex.Store({
    state,
    mutations
})


export default store;

(2).主页中使用store改变数据,文件位置src/components/Home.vue


<template>
    <div id="home">    
       我是首页组件  -- {{this.$store.state.count}}

        <br>
        <button @click="incCount()">增加数量+</button>
        
       
    </div>
</template>


<script>

    //1. 引入store   建议store的名字不要变

//import MyStore from '../vuex/store.js'
    import store from '../vuex/store.js';

    //2.注册
    export default{
        data(){
            return {               
               msg:'我是一个home组件',
                value1: null,
             
            }
        },
        store, //如果改了,应该使用这样的格式:store:MyStore
        methods:{
            incCount(){
                //改变vuex store里面的数据

                this.$store.commit('incCount');   /*触发 mutations 改变 state里面的数据*/
            }

        }
    }

</script>

<style lang="scss" scoped>
    
</style>

(3),新闻组件使用store,改变数据,文件位置:src/components/News.vue


<template>    
    <div id="news">    
       我是新闻组件   --{{this.$store.state.count}}



        
        <br>

        <button @click="incCount()">增加数量</button>
        
    </div>

</template>


<script>
    //1. 引入store
    import store from '../vuex/store.js';

    export default{
        data(){
            return {               
               msg:'我是一个新闻组件'
              
            }
        },
        store,
        methods:{

            incCount(){

                this.$store.commit('incCount');
            }
        }
    }

</script>





<style lang="scss" scoped>
    
    .list{

        li{
            height:3.4rem;

            line-height:3.4rem;

            boder-bottom:1px solid #eee;

            font-size:1.6rem;

            a{

                color:#666;

                
            }
        }
    }

</style>

(4).隔离开的路由,文件位置:src/router/router.js


import Vue from 'vue';

//配置路由
import VueRouter from 'vue-router';
Vue.use(VueRouter);


//1.创建组件
import Home from '../components/Home.vue';
import News from '../components/News.vue';
import User from '../components/User.vue';


//2.配置路由   注意:名字

const routes = [
    { path: '/home', component: Home },
    { path: '/news', component: News, name: 'news' },

    { path: '/user', component: User },


    { path: '*', redirect: '/home' }   /*默认跳转路由*/
]


//3.实例化VueRouter  注意:名字

const router = new VueRouter({
    mode: 'history',   /*hash模式改为history*/
    routes // (缩写)相当于 routes: routes
})


//5 <router-view></router-view> 放在 App.vue

export default router;


(5).main.js文件:

import Vue from 'vue';
import App from './App.vue';

//引入公共的scss   注意:创建项目的时候必须用scss
// import './assets/css/basic.scss';   

import router from './router/router.js';

//4、挂载路由

new Vue({
  el: '#app',
  router,
  render: h => h(App)
})



(6).根组件:App.vue


<template>


  <div id="app"> 

    <header class="header">
      <router-link to="/home">首页</router-link>
      <router-link to="/news">新闻</router-link>
    
    </header>

    <hr>
    <router-view></router-view>

  </div>
</template>
<script>

   export default {     
      data () { 
        return {
         
         msg:'欢迎来到vue,我是根组件'
        }
      }
     
    }
</script>
<style >

  .header{


    height:4.4rem;

    background:#000;

    color:#fff;

    line-height:4.4rem;

    text-align:center;

    a{
      color:#fff;

      padding:0 2rem

    }
  }
</style>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值