Vuex简介使用

2020年啦,复习一下Vuex,这样才能温故而知新,记下来
1:先安装下vuex

cnpm install  vuex --save

2:新建一个vuex文件夹,下面新建一个store.js
3:store.js

import Vue  from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

const state={
  count:1
}

const mutations={
  add(state){
    state.count++
  },
  reduce(state){
    state.count--
  }
}


export default new  Vuex.Store({
  state,
  mutations
})

4:新建一个Conter.vue,用来存放count

<template>
  <div>
      <h2>Vuex</h2>
      <div>
        <button @click=" $store.commit('reduce')">-</button>
        <span>{{$store.state.count}}</span>
        <button @click=" $store.commit('add')">+</button>
      </div>
  </div>
</template>

<script>
import store from '@/vuex/store';


 export default{
   name:'count',
   data(){
     return{
        count:0
     }
   },
   store,
   methods:{
   }

 }
</script>
<style>
</style>

效果图
image.png
~基本的功能就实现啦
但是我们发现{{$store.state.count}}写法不太简洁,我们用三种方法来改写一下
第一种方法:计算属性

    computed:{
     count(){
        return this.$store.state.count
     }
    }

第二种方法:mapState

import {mapState} from 'vuex';
computed:mapState({
      count:state=>state.count
})

也可以不用用箭头函数改写一下咯

computed:mapState({
     count:function(state){
        return  state.count
  }
})

第三种方法:数组

computed:mapState(['count'])

大功告成
那么如何传递参数了?
具体是在mutations种传递参数

const mutations={
  add(state,n){
    state.count += n
  },
  reduce(state){
    state.count--
  }
}

使用

 <button @click=" $store.commit('add',10)">+</button>

效果图
image.png
大功告成
我们想把提交方法简写,不要那么长,具体怎么实现了?
答案就是用mutations
1:引入mapMutations

import {mapState,mapMutations} from 'vuex';

2:方法改写

methods:mapMutations(['add','reduce']),

3:点击事件

 <button @click=" reduce">-</button>

那么如果想在每次加之前过滤一下,比如+100,再执行后续的计算该如何实现了?
答案是getters
1:定义一个getters

const  getters={
  count:function(state){
    return state.count += 100
  }
}

接下来我们实现一下异步提交,好不好
1:先定义一个actions

const actions={
  addAction(context){
    context.commit('add',10);
    setTimeout(()=>{
      context.commit('reduce');
    },5000)
    console.log('我是异步哦...')
  },
  reduceAction({commit}){
    commit('reduce');
  }
}

2:重新定义一个点击方法

 <div>
        <button @click="reduceAction">-</button>
        <span>{{$store.state.count}}---{{count}}</span>
        <button @click="addAction">+</button>
      </div>

3:使用

import {mapState,mapMutations,mapGetters,mapActions} from 'vuex';
   methods:{
     ...mapMutations(['add','reduce']),
     ...mapActions(['reduceAction','addAction'])
   },
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vuex和Pinia都是Vue.js的状态管理库,用于在Vue.js应用程序中管理和共享状态。它们都提供了一种结构化的方式来管理应用程序的状态,并且能够在组件之间方便地共享数据。[1] 然而,Vuex和Pinia在设计和使用上有一些区别。VuexVue.js官方推荐的状态管理库,它使用了基于对象的全局状态树的概念,通过定义和调用mutations、actions和getters来修改和获取状态。而Pinia是由Vue.js社区维护的新一代状态管理库,它借鉴了Vuex的设计思想,并使用了Vue 3 Composition API来定义状态和操作。Pinia提供了更简洁、类型安全的API,并且与Vue 3生态系统中的其他库和工具更好地集成。 虽然VuexVue.js的官方推荐库,并且在大量项目中得到了广泛应用,但Pinia作为一个新兴的状态管理库也受到了一定的关注。它提供了更好的类型安全性和更简洁的API,尤其是在使用Vue 3 Composition API时,能够让开发者更好地利用Vue.js的新特性。 总结来说,VuexVue.js官方推荐的状态管理库,而Pinia是一个新一代的状态管理库,它们都可以在Vue.js应用程序中管理和共享状态,但在使用方式和API设计上有一些区别。具体选择使用哪个库,可以根据项目的需求、开发者的习惯和技术栈来进行权衡和选择。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [简介vuex和pinia](https://blog.csdn.net/m0_71966801/article/details/131603107)[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_2"}}] [.reference_item style="max-width: 50%"] - *3* [在vue中使用pinia,并且保持数据持久化](https://download.csdn.net/download/shaoyahu/87691975)[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_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值