美文网首页
6. Vue 引入vuex store

6. Vue 引入vuex store

作者: zouhao1985 | 来源:发表于2022-03-26 20:30 被阅读0次

0.开始之前

如果打算开发一个大型的单页应用,使用vuex比较合适。它可以让页面中多个组件共享变量,即单页面中全局的变量。
如果应用比较简单,可以不考虑使用vuex来管理全局变量。
注意,vuex在单页应用中生效,如果跳转到其他页面,vuex会失效(不会保存上一个页面的变量信息)。
这里注意版本对应关系 vue2/vuex3,vue3/vuex4。

1.vuex store安装

npm install vuex@3 --save

这里指定版本vuex3

2.vuex 使用

推荐目录结构,在src目录下新建store目录,新建index.js。

# index.js
import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

const store = new Vuex.Store({
    state: {
        name: '张三',
        number: 0
    },
    getters: {
        getName(state) {
            return 'third ' + state.name
        },
        getNumber(state) {
            return 'third ' + state.number
        }
    },
    mutations: {
        setName(state, payload) {
          state.name = payload.name
        },
        setNumber(state, payload) {
          state.number = payload.number
        }
    },
    actions: {
        setName(content, payload) {
            return new Promise(resolve => {
                setTimeout(() => {
                    content.commit('setName', {name: payload.name})
                    resolve()
                }, 1000)
            })
        },
        setNumber(content, payload) {
            return new Promise(resolve => {
                setTimeout(() => {
                    content.commit('setNumber', {number: payload.number})
                    resolve()
                }, 2000)
            })
        }
    }
})

export default store

在main.js中引用

# main.js 部分代码
import store from './store'

new Vue({
  router,
  store,
  render: h => h(App),
}).$mount('#app')

3.测试

# login.vue 部分代码
<script>
import httpGet from '@/utils/http-util.js'
import { mapState, mapGetters, mapMutations, mapActions } from 'vuex'

export default {
    name: 'login',
    data() {
        return {
            username: 'panda',
            passowrd: ''
        }
    },
    mounted() {
      // 第一种写法
      console.log('第一种写法 name:' + this.$store.state.name)
      console.log('第一种写法 number:' + this.$store.state.number)
      // 第二种写法
      console.log('第二种写法 name:' + this.name)
      console.log('第二种写法 number:' + this.number)
      // 第三种写法
      console.log('第三种写法 name:' + this.getName)
      console.log('第三种写法 number:' + this.getNumber)

    //   this.$store.commit('setName', { name: '李四' });
    //   this.$store.commit('setNumber', { number: 666 });
        this.setNumber({number: 10})
        this.setName({name: '李四'})

      console.log('第三种写法1 name:' + this.getName)
      console.log('第三种写法1 number:' + this.getNumber)

      setTimeout(() => {
        console.log('第四种写法 name:' + this.getName)
        console.log('第四种写法 number:' + this.getNumber)
      }, 2000)
    },
    methods: {
        login() {
            console.log('login username: ' + this.username + ', pwd: ' + this.passowrd)
            sessionStorage.setItem('username', this.username)
            // httpGet('/api')
            httpGet('/api/user/get/1')
            this.$router.push({path: '/dashboard'})
        },
        // 注意mutations放在methods中
        // ...mapMutations(['setName', 'setNumber']),
        ...mapActions(['setName', 'setNumber'])
        // 以上方法有冲突,但是不会报错,避免的方式就是用不同的名字
    },
    computed: {
        // 第二种写法
        ...mapState(['name', 'number']),
        // 第三种写法
        ...mapGetters(['getName', 'getNumber'])    
    }
}
</script>

4.参考

https://tehub.com/a/3EvY5cOxsu
https://juejin.cn/post/6844903949586153480

5.代码下载

https://gitee.com/animal-fox_admin/learn-vue-web
branch:lesson4

相关文章

  • 6. Vue 引入vuex store

    0.开始之前 如果打算开发一个大型的单页应用,使用vuex比较合适。它可以让页面中多个组件共享变量,即单页面中全局...

  • 无标题文章是

    ### store 1. Vue 组件中获得 Vuex 状态 ```js //方式一 全局引入单例类 // 创建一...

  • vuex梳理

    ### store 1. Vue 组件中获得 Vuex 状态 ```js //方式一 全局引入单例类 // 创建一...

  • 通过Vuex实现Input双向绑定

    通过Vuex实现Input的双向绑定 安装Vuex 引入Vuex 新建store.js 页面中绑定

  • 安装Vuex

    安装vuex依赖包: 导入vuex包 创建 store 对象 vuex实例挂载到vue对象上 来源:https:/...

  • vuex状态管理的学习

    学习vuex首先要在vue的项目中安装vuexcnpm i vuex -S引入vuex 并注册import Vue...

  • VUEX的使用

    1.引入VUEX 1.通过vue ui引入2.手敲npm install vuex --save 2.VUEX的项...

  • VUEX

    main.js 中引入vueximport vuex from 'vuex'Vue.use(vuex )new V...

  • Vuex

    引入vuex: npm install vuex --save 在项目的src里面建立文件夹store,文件如...

  • vuex使用记录

    副标题:vuex使用详解、vue使用全局变量、vue使用 store 这篇博客主要记录了 vuex的使用方法,简单...

网友评论

      本文标题:6. Vue 引入vuex store

      本文链接:https://www.haomeiwen.com/subject/otyodrtx.html