微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 VUEX 中创建动作类型的正确方法,当在一个动作模块内调度另一个突变模块时使用 {root: true}?

如何解决在 VUEX 中创建动作类型的正确方法,当在一个动作模块内调度另一个突变模块时使用 {root: true}?

我正在与 Typescript 一起探索 Vuex 模块。 我有一个关于 {root: true} 的问题。当在一个动作模块中调度另一个突变模块时。

例如:

模块一

export interface ActionsOneType {
    [ACTIONS_FETCH_DATA](
        {commit}: AugmentedActionContext
    ): void
}
export type MutationsOne<S = ModuleStateTypeOne> = {
    [MUTATIONS_MODULE_ONE](state: S,payload: S): void
}

export const actionsOne: ActionTree<ModuleStateTypeOne,ModuleStateTypeOne> & ActionsOne = {
    async [ACTIONS_FETCH_DATA]({commit}){
        try {
            commit(MUTATIONS_MODULE_TWO.SET_STATUS,'loading',{root: true}) // error in this line**
            const serverData = await getDataFromServer()
            commit(MUTATIONS_MODULE_ONE,serverData )
            commit(MUTATIONS_MODULE_TWO.SET_STATUS,'success',{root: true})// error in this line
        } catch (error){
            commit(MUTATIONS_MODULE_TWO.SET_ERROR_MESSAGE,error,{root: true}) // error in this line TS2554
        } finally {
             commit(MUTATIONS_MODULE_TWO.SET_STATUS,'Failed',{root: true})  // error in this line TS2554
        }
    }
}

模块二


export type MutationModuleTwo<S = ModuleStateTwo> = {
    [MUTATIONS_MODULE_TWO.SET_STATUS](state: S,payload: string): void
    [MUTATIONS_MODULE_TWO.SET_ERROR](state: S,payload: string): void
}


export const mutationsModuleTwo: MutationTree<ModuleStateTwo> & MutationModuleTwo= {
    [MUTATIONS_MODULE_TWO.SET_STATUS](state,payload) {
        state.status = payload
    },[MUTATIONS_MODULE_TWO.SET_ERROR](state,payload) {
        state.error = payload
    }
}

错误消息 - TS2554:需要 2 个参数,但得到 3 个

使用 root 属性 {root: true} 只是让 VUEX 存储知道我想分派其他模块,但参数 {root: true} 不使用 like payload 来改变另一个状态。

我不知道如何解决这个问题。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。