网站LOGO
L S Y 小窝
页面加载中
12月5日
网站LOGO L S Y 小窝
菜单
  • L S Y 小窝
    用户的头像
    首次访问
    上次留言
    累计留言
    我的等级
    我的角色
    打赏二维码
    打赏博主
    vuex-actions异步函数
    点击复制本页地址
    微信扫一扫
    文章二维码
    文章图片 文章标题
    创建时间
  • 一 言
    确认删除此评论么? 确认
  • 本弹窗介绍内容来自,本网站不对其中内容负责。
    按住ctrl可打开默认菜单

    vuex-actions异步函数

    yuan · 原创 ·
    Vue · vuevuex
    共 2673 字 · 约 1 分钟 · 85959
    本文最后更新于2022年09月23日,已经过了438天没有更新,若内容或图片失效,请留言反馈

    action的基本定义

    ■官方强调了不要在Mutations中进行异步操作

    • 但是某些情况,我们确实希望在vuex中进行一些异步操作,比如网络请求,必然是异步的,这个时候怎么处理呢?
    • action类似于mutation,但是是用来代替mutation进行异步操作的

    action的基本使用

    ■这里使用setTimeout来模拟异步操作,在一秒后修改state中info的值

    • Action 函数接受一个与 store 实例具有相同方法和属性的 context 对象,因此你可以调用 context.commit 提交一个 mutation
    • 也可以通过 context.state 和 context.getters 来获取 state 和 getters

    ■stroe下index.js中的代码

    import Vue from 'vue'
    import Vuex from 'vuex'
    
    Vue.use(Vuex)
    
    export default new Vuex.Store({
      state: {
                info:'xiu',
      },
      mutations: {
        mUpdateInfo(state){
          state.info = 'fan'
        }
      },
      actions: {
        aUpdateInfo(context){
            setTimeout(() => {、
                //提交到mutation进行处理
                context.commit('mUpdateInfo')
            },1000)        
        }
      },
    })
    

    ■在actions中定义异步操作的函数

    • 但前面提到过,修改state中的数据要在mutations中进行
    • 所以请求完成后action通过commit提交到mutation进行处理

    ■组件中的代码

    <template>
      <div class="about">
        <h1>This is an about page</h1>
                <h2>{{$store.state.info}}</h2>
                <button @click="update()">修改</button>
      </div>
    </template>
    
    <script>
      export default{
        name: 'About',
        methods:{
            update(){
                //通过dispatch提交到action
                this.$store.dispatch("aUpdateInfo")
            },
        }
      }
    </script>
    
    

    ■Actions 支持和mutations同样的载荷方式和对象方式进行分发

    // 以载荷形式分发
    store.dispatch('incrementAsync', {
      amount: 10
    })
    
    // 以对象形式分发
    store.dispatch({
      type: 'incrementAsync',
      amount: 10
    })
    
    

    ■Action 通常是异步的,那么如何知道 action 什么时候结束呢?

    • 首先,你需要明白 store.dispatch 可以处理被触发的 action 的处理函数返回的 Promise,并且store.dispatch 仍旧返回 Promise --->(Promise的使用
      actions: {
        aUpdateInfo(context){
            return new Promise((resolve,reject) => {
                setTimeout(() => {
                    context.commit('mUpdateInfo')
                    resolve("请求完成")
                },1000)
            })
        }
      },
    
    

    ■现在可以在组件中通过.then()知道请求生么时候完成

            update(){
                this.$store
                     .dispatch("aUpdateInfo")
                     .then(res => {
                        console.log(res)
                     })
            },
    
    

    其他vuex文章

    Vuex概念和作用解析
    vuex-mutation同步函数
    vuex-getters的使用
    vuex-actions异步函数
    vuex-modules的使用

    声明:本文由 yuan(博主)原创,依据 CC-BY-NC-SA 4.0 许可协议 授权,转载请注明出处。
    此页面评论区已关闭
    博客logo L S Y 小窝 51统计 百度统计
    MOEICP 萌ICP备20232210号 ICP 赣ICP备20003060号 又拍云 本站由又拍云提供CDN加速/云存储服务

    🕛

    本站已运行 3 年 270 天 6 小时 19 分

    🌳

    自豪地使用 Typecho 建站,并搭配 MyLife 主题
    L S Y 小窝. © 2020 ~ 2023.
    网站logo

    L S Y 小窝
     
     
     
     
    壁纸