vue中使用vuex(超详细)

vuex中,有默认的五种基本的对象个人理解:

  1. state : (初始化数据)
  2. getter (输出给外界数据)
  3. mutation (定义的方法,必须同步)
  4. action (输出给外界方法,可异步)
  5. module(每一个js 文件都可以包含state getter mutation action四项,统一进行管理)

下载 npm install vuex --save 以下使用仅是初步使用,如需封装可自行再次封装

使用方式

1.新建一个store.js文件

import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
const state={
    number:0
}
const store=new Vuex.Store({
    state
})
export default store

2.在Main.js文件中引入

import store from 'xxx' //1的新建文件
在new Vue({
    store   //加入上面引用的
})

3.在.vue文件中获取state中的值

created:function(){
    console.log(this.$store.state.number) //this.$store.state.number即可拿到值 输出0
}

4.配合getters使用,回到1

import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
const state={
    nuamber:0
}
const getters={
    newNumber(){//aaNumber名称随意起
        return state.number
    }
}
const store=new Vuex.Store({
    state,
    getters
})
export default store

5.在.vue,通过getters获取数据

created:function(){
    console.log(this.$store.getters.newNumber) //this.$store.getters.newNumber即可拿到值 输出0
}

6.配合mutations ,增加点击事件,改变state 回到4

​
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
const state={
    number:0
}
const mutations={
    aaNumber(state){//aaNumber名称随意起
        state.number++
    }
}
const getters={
    newNumber(){//aaNumber名称随意起
        return state.number
    }
}
const store=new Vuex.Store({
    state,
    getters,
    mutations
})
export default store

​

7.在.vue文件下,通过mutations改变数据

<template>
  <div id='app'>
      <button @click="a">点击</button>//每次点击将改变下面数据不断累加
      <div>{{this.store.getters.newNumber}}</div>
  </div>
</template>
<script>
export default{
  methods:{
      a(){
          this.$store.commit('aaNumber')
      }
  }
}
</script>

8.使用mapMutations

<template>
  <div id='app'>
      <button @click="a">点击</button>//每次点击将改变下面数据不断累加
      <div>{{this.store.getters.newNumber}}</div>
  </div>
</template>
<script>
import {mapMutations} from 'vuex'
export default{
  methods:{
      ...mapMutations(['aaNumber'])
      a(){
          this.aaNumber()
      }
  }
}
</script>

9.actions请求

​
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
const state={
    number:0
}
const mutations={
    aaNumber(state){//aaNumber名称随意起
        state.number++
    }
}
const actions={
    aaNumberchange(context){//触发mutation里面函数的方法,context与store实例具体相同方法和属性
        context.commit('aaNumber')
    }
}
const getters={
    newNumber(){//aaNumber名称随意起
        return state.number
    }
}
const store=new Vuex.Store({
    state,
    getters,
    mutations
})
export default store

​

10.actions改变数据

<template>
  <div id='app'>
      <button @click="a">点击</button>//每次点击将改变下面数据不断累加
      <div>{{this.store.getters.newNumber}}</div>
  </div>
</template>
<script>
export default{
  methods:{
      a(){
         this.$store.dispatch('aaNumberchange')
      }
  }
}
</script>

11.modules

在真正用的时候不会只有一个store 基本都会将方法分开,这里在做一个递减器主要为了分开两个文件,新建一个add.js 文件与reduce.js文件。把之前store.js中state、mutations、actions、getters放到add.js 中如图 reduce.js文件一样只是将++改成--

add.js

​
const state={
    number:0
}
const mutations={
    aaNumber(state){//aaNumber名称随意起
        state.number++
    }
}
const actions={
    aaNumberchange(context){//触发mutation里面函数的方法,context与store实例具体相同方法和属性
        context.commit('aaNumber')
    }
}
const getters={
    newNumber(){//aaNumber名称随意起
        return state.number
    }
}
export default {
     namespaced: true, state,mutations,actions ,getters
}

​

reduce.js

​
const state={
    number:0
}
const mutations={
    aaNumber(state){//aaNumber名称随意起
        state.number--
    }
}
const actions={
    aaNumberchange(context){//触发mutation里面函数的方法,context与store实例具体相同方法和属性
        context.commit('aaNumber')
    }
}
const getters={
    newNumber(){//aaNumber名称随意起
        return state.number
    }
}
export default {
     namespaced: true, state,mutations,actions ,getters
}

​

12在store.js文件中引入文件

import Vue from 'vue'
import Vuex from 'vuex'
import aa from 'xx'  //add.js 对应文件路径
import bb from 'xx'  //reduce.js 对应文件路径
Vue.use(Vuex)
export default new Vuex.Store({
    modules:{
      aa,
      bb 
    }
})

13.在.vue文件中进行使用,以及可以使用mapState来获取值

<template>
  <div id='app'>
      <button @click="a">点击</button>//每次点击将改变下面数据不断累加
      <div>{{dataA}}</div> //累加的数据
      <div>{{dataB}}</div> //递减的数据
      <button @click="b">点击</button>//每次点击将改变下面数据不断递减
  </div>
</template>
<script>
 import {mapState}  from 'vuex'
export default{
  computed({
      ...mapState({
              dataA(state){
                  return state.aa.number //累加的数据
              },
            dataB(state){
                  return state.aa.number //递减的数据
              },
           //或者 data:state=>state.aa.number ES6  累加的数据
      })
  })
  methods:{
      a(){
         this.$store.dispatch('aa/aaNumberchange') //aa 表示12  modules中
      },
      b(){
         this.$store.dispatch('bb/aaNumberchange') //bb同上
      }
  }
}
</script>

14.通过mapGetters来取值,取的是getter的方式

<template>
  <div id='app'>
      <button @click="a">点击</button>//每次点击将改变下面数据不断累加
      <div>{{dataA}}</div> //累加的数据
      <div>{{dataB}}</div> //递减的数据
      <button @click="b">点击</button>//每次点击将改变下面数据不断递减
  </div>
</template>
<script>
 import {mapGetters}  from 'vuex'
export default{
  computed({
      ...mapGetters({
          dataA:'aa/newNumber',
        dataB:'bb/newNumber'
      })
  })
  methods:{
      a(){
         this.$store.dispatch('aa/aaNumberchange') //aa 表示12  modules中
      },
      b(){
         this.$store.dispatch('bb/aaNumberchange') //bb同上
      }
  }
}
</script>

15.mapActions 代替this.$store.dispatch()

<template>
  <div id='app'>
      <button @click="a">点击</button>//每次点击将改变下面数据不断累加
      <div>{{dataA}}</div> //累加的数据
      <div>{{dataB}}</div> //递减的数据
      <button @click="b">点击</button>//每次点击将改变下面数据不断递减
  </div>
</template>
<script>
 import {mapGetters,mapActions}  from 'vuex'
export default{
  computed({
      ...mapGetters({
          dataA:'aa/newNumber',
        dataB:'bb/newNumber'
      })
  })
  methods:{
    ...mapActions({a:'aa/aaNumberchange'},{b:'bb/aaNumberchange'})  //a b是方法
  }
}
</script>

  • 6
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue3使用Vuex接收页面传递数据的步骤如下: 1. 首先,在Vue3项目安装Vuex,可以使用npm或者yarn命令进行安装。 2. 在项目的根目录下创建一个名为store的文件夹,并在该文件夹下创建一个名为index.js的文件。 3. 在index.js文件,引入VueVuex,同时创建一个新的Vuex store实例。 4. 在store实例定义state、mutations、actions和getters等属性和方法。 5. 在Vue组件通过this.$store来访问store的数据和方法。 具体实现步骤如下: 1. 安装Vuex:在命令行使用以下命令安装Vuex。 ``` npm install vuex ``` 2. 创建store文件夹和index.js文件:在项目的根目录下创建一个名为store的文件夹,并在该文件夹下创建一个名为index.js的文件。 3. 在index.js文件引入VueVuex,并创建一个新的Vuex store实例。 ``` import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) const store = new Vuex.Store({ // 在这里定义state、mutations、actions和getters等属性和方法 }) export default store ``` 4. 在store实例定义state、mutations、actions和getters等属性和方法,用于接收和处理页面传递的数据。 - 在state定义需要接收的数据,例如: ``` state: { data: null } ``` - 在mutations定义修改state数据的方法,例如: ``` mutations: { setData(state, payload) { state.data = payload } } ``` - 在actions定义触发mutations方法的动作,例如: ``` actions: { setData({ commit }, payload) { commit('setData', payload) } } ``` - 在getters定义对state数据的计算属性,例如: ``` getters: { getData: state => state.data } ``` 5. 在Vue组件使用this.$store来访问store的数据和方法,例如: ``` import { mapState, mapActions, mapGetters } from 'vuex' export default { computed: { ...mapState(['data']), ...mapGetters(['getData']) }, methods: { ...mapActions(['setData']) } } ``` 通过以上步骤,Vue3可以使用Vuex接收页面传递的数据,并在组件使用this.$store访问和操作这些数据。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Vue3 学习——vue使用vuex(详细)](https://blog.csdn.net/qq_46201146/article/details/125805058)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [vue3使用vuex实现页面实时更新数据(setup)](https://blog.csdn.net/qq_52959651/article/details/125950662)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值