VueX的五个状态

一、state

定义:相当于组件中的data,用来定义状态,其他状态的设定可以认定为是为了对state进行管理而延申的

特点:响应式

用法:

1.可以直接在组件中this.$store.state.xxx(state变量名)来调用

2.官方推荐使用计算属性(computed)返回,每当变量值变化时,都会重新计算,并触发更新相关DOM

<template>
    <div class="demo">
        {{this.getNumber}}
        {{getNumber}}        
    </div>
</template>

<script>
export default {
    computed:{
        //需以函数方式返回,函数名相当于变量名
        getNumber(){
            return this.$store.state.token
        }
    }
}
</script>

扩展:mapState 辅助函数

使用场景:快捷获取多个状态

<template>
    <div class="demo">
        {{this.getNumber}}
        {{getNumber}}        
    </div>
</template>

<script>
import { mapState } from 'vuex'
export default {
    data:{
        return{
            localNumber:10
        }
    }
    computed:mapState({
        //当命名与VueX中的命名相同时也可以直接获取
        "number"        

        //getItem相当于变量名,number相当于this.$store.state.number
        getItem:"number"

        //也可并入局部状态,但是必须使用常规函数
        countPlusLocalState (state) {
          return state.number + this.localNumber
        }
    }),
}
</script>

二、getter

定义:过滤作用

用法:

1.可以直接在组件中过滤

computed: {
  listName(){
    return this.$store.state.list.filter(item => item.name)
  }
}

2.如果多个组件都使用到此属性时,可以定义在VueX文件中

//store.js(Vuex)
const store = createStore({
  state: {
    todos: [
      { id: 1, text: '...', done: true },
      { id: 2, text: '...', done: false }
    ]
  },
  getters: {
    //无传参
    doneTodos: (state) => {
      return state.todos.filter(todo => todo.done)
    }

    getTodoById: (state) => (id) => {
        return state.todos.find(todo => todo.id === id)
    }
  }
})



//demo.vue,调用
    //无传参
computed: {
  doneTodosCount () {
    return this.$store.getters.doneTodos
  }
}

    //传参
store.getters.getTodoById(2)

三、Mutation

作用:更改状态

特点:必须是同步操作,当mutation被触发时,回调还没有调用,

用法:在VueX中定义mutations函数,函数的第一个参数是state,也可以传值作为第二个参数,传值一般为对象

//store.js
mutations: {
  increment (state, n) {
    state.count += n
  }
}

//demo.vue
store.commit('increment', 10)

扩展:快捷方式提交

//demo.vue
//引入mapMutations 
import { mapMutations } from 'vuex'


export default {
  methods: {
    ...mapMutations([
      'increment',         // `this.$store.commit('increment')`

      'incrementBy()'     // this.$store.commit('incrementBy', amount)
    ]),

    ...mapMutations({
      add: 'increment'     //将此映射给局部状态
    })
  }
}

四、Action

作用:异步操作的处理

特点:action提交的是到mutation,而不是直接修改

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值