• vueX的简单使用


    引入什么的都不说了,前面说过了,

    下面简单列出今天简单使用的情况:

    store.js

    import Vue from "vue";
    import Vuex from "vuex";
    
    Vue.use(Vuex);
    
    export default new Vuex.Store({
      state: {
        pageName:'签到须知'
      },
      getters:{
        pageName(state){
          return state.pageName;
        }
      },
      mutations: {
        setPageName(state,val){
          state.pageName=val;
        }
      },
      actions: {
    
      }
    });

    页面内:

    <script>
    import {mapGetters,mapActions} from 'vuex';
     
    export default {
        data(){
            return{
                text:"头部",
            }
        },
        computed:{
            ...mapGetters([
                'pageName'//获取到state数据。
            ])
        },
        mounted(){
            this.$store.commit("setPageName","呵呵");
            console.log(this.$store.getters.pageName);
        },
        methods:{
           aa(){
               this.$store.commit("setPageName","嗯嗯嗯");
           } 
        }
    }
    </script>

    这样,可以把pageName双向绑定在页面上,只要store里的pageName值一变,页面就会做出相应的反应。

    还有很多种用法,以后再上码

    下面来介绍一下,比较系统的用法

    我们可以在src根目录下建立一个store文件夹

    结构目录如图:

    store文件中有三块,modules文件夹/getters.js/index.js

    modules是我们自己分的模块,可以根据不同的功能,或则页面来划分,

    我们来看看modules下user.js模块里面的内容,看一个就行,其它模块类似

    import { login, logout, getInfo } from '@/api/user'
    import { getToken, setToken, removeToken } from '@/utils/auth'
    import { resetRouter } from '@/router'
    
    const state = {
      token: getToken(),
      name: '',
      avatar: '',
      text: '',
    }
    
    const mutations = {
      SET_TOKEN: (state, token) => {
        state.token = token
      },
      SET_NAME: (state, name) => {
        state.name = name
      },
      SET_AVATAR: (state, avatar) => {
        state.avatar = avatar
      },
      SET_TEXT:(state,val) =>{
        state.text = val;
      }
    }
    
    const actions = {
      // user login
      login({ commit }, userInfo) {
        const { username, password } = userInfo
        return new Promise((resolve, reject) => {
          login({ username: username.trim(), password: password }).then(response => {
            const { data } = response
            commit('SET_TOKEN', data.token)
            setToken(data.token)
            resolve()
          }).catch(error => {
            reject(error)
          })
        })
      },
    
      // get user info
      getInfo({ commit, state }) {
        return new Promise((resolve, reject) => {
          getInfo(state.token).then(response => {
            const { data } = response
    
            if (!data) {
              reject('Verification failed, please Login again.')
            }
    
            const { name, avatar } = data
    
            commit('SET_NAME', name)
            commit('SET_AVATAR', avatar)
            resolve(data)
          }).catch(error => {
            reject(error)
          })
        })
      },
    
      // user logout
      logout({ commit, state }) {
        return new Promise((resolve, reject) => {
          logout(state.token).then(() => {
            commit('SET_TOKEN', '')
            removeToken()
            resetRouter()
            resolve()
          }).catch(error => {
            reject(error)
          })
        })
      },
    
      // remove token
      resetToken({ commit }) {
        return new Promise(resolve => {
          commit('SET_TOKEN', '')
          removeToken()
          resolve()
        })
      },
      setText({ commit },val){
        commit('SET_TEXT',val);
      }
    }
    
    export default {
      namespaced: true,
      state,
      mutations,
      actions
    }

    可见这user.js模块里就是定义了state、mutations、actions然后export输出了

    再看看getters.js

    getters.js就是把getter单独拿出来了,专门写getter的

    然后再来看看index.js

    index.js就是把几个模块,和getter都放在了vuex实例中

     在外面调用user模块中的mutations中的方法时可以这样调用

    this.$store.commit('user/SET_TEXT',newVal);

    调用actions中的方法时,可以这样调用

    this.$store.dispatch('user/setText',newVal);

    补充知识:

    {state, getters, commit, dispatch,rootState, rootGetters }
    state (state) / getters (getters) / commit (mutations) / dispatch (actions) / rootState 所有state集合 / rootGetters 所有getters集合

  • 相关阅读:
    ajax长轮询实现即时聊天室
    node.js 通过post上传图片并显示
    Java集合类详解
    多行子查询
    Oracle中查看用户下面所有表的语句
    关于Oracle的create
    Oracle数据库学习
    oracle数据库
    js 中 undefined、NaN、null
    学习数据库SQL语句2
  • 原文地址:https://www.cnblogs.com/fqh123/p/10899113.html
Copyright © 2020-2023  润新知