Vue Vuex 3.0(Day43)

17 阅读1分钟

求和案例(Vuex版1.0)

  1. 将sum配置在index.js文件中的state中
  2. 在组件中绑定的方法中调用dispatch方法并传入参数
  3. 在index.js文件中actions中配置传入方法并调用commit方法
  4. 在mutations中写入业务逻辑实现功能

Count组件

<script>
import {defineComponent} from 'vue'export default defineComponent({
    name: "Count",
    data(){
        return {
            number:1,
        }
    },
    methods:{
        // 加法
        increment(){
            this.$store.commit('ADD',this.number)
        },
        // 减法
        decrement(){
            this.$store.commit('MINUS',this.number)
        },
        // 合为奇数加
        incrementOdd(){
            this.$store.dispatch('addOdd',this.number)
        },
        // 等一等再加
        incrementWait(){
            this.$store.dispatch('addWait',this.number)
        },
    },
})
</script><template>
    <div class="count">
        <!--  组件中读取Vuex中的数据  -->
        <h1>当前求和为:{{$store.state.sum}}</h1>
        <select v-model.number="number">
            <option value="1">1</option>
            <option value="2">2</option>
            <option value="3">3</option>
        </select>
        <button @click="increment">+</button>
        <button @click="decrement">-</button>
        <button @click="incrementOdd">当前求和为奇数再加</button>
        <button @click="incrementWait">等一等再加</button>
    </div>
</template>

index.js文件

const actions = {
/*    add(context, value) {
        // contest 上下文对象
        context.commit('ADD', value)
    },
    minus(context, value) {
        context.commit('MINUS', value)
    },
  */
    addOdd(context, value) {
        if (context.state.sum % 2) {
            context.commit('ADD', value)
        }
    },
    addWait(context, value) {
        setTimeout(() => {
            context.commit('ADD', value)
        }, 500)
    }
}
// 准备mutations,用于操作数据(state)
const mutations = {
    ADD(state, value) {
        state.sum += value
    },
    MINUS(state, value) {
        state.sum -= value
    },
}
//准备state,用于存储数据
const state = {
    sum: 0,
}
  • 由于actions中的add方法和minus方法无特殊业务逻辑,因此这两种方法可进行省略
  • 在Count组件中此两种方法直接调用commit方法进行数据处理