vue3中vuex报错,dispatch未定义,unknown action type找不到方法??

一共两个问题
问题一:
由于vue3中name跳转路由 params 参数无法传递,query参数会拼接在地址上,不美观,于是将参数通过 vuex 传递。

const goDetail = (e) => {
  store.dispatch('setPathParams', { picUrl: e.picUrl })
  router.push({
    name: 'personalizedDetail',
    // query: { picUrl: e.picUrl }
  });
}

在vue2中使用方式就是这样的,但是在3中就报错

// 此处修改 state 中数据,同步执行
const mutations = {
    CHANGEPATHPARAMS(state, payload) {
        state.pathParams = payload;
    },
    DELPATHPARAMS(state) {
        state.pathParams = {}
    },
    
};
// 异步处理,获得数据之后,不能在此处赋值,需要在 mutations 中修改
const actions = {
    clearUser({ commit }) {
        commit(CLEAR_USER);
    },
    async setPathParams({ commit }, payload) {
        console.log(456); // 有执行
        // 此处为什么会报 dispatch 未定义,
        await dispatch('clearPathParams')
        commit('CHANGEPATHPARAMS', payload);
    },
    async clearPathParams({ commit }) {
        console.log(123); // 未执行
        await commit('DELPATHPARAMS');
    },
};

报错截图

问题二:
在vuex中使用 modules 报错,无法正确找到方法

// 先引入,路径正确的
import moduleUsers from '/Users/index'
export default createStore({
    modules:{
        moduleUsers
    },
    plugins: [myPersistedState]
});
// moduleUsers 文件
const moduleUsers = {
  // namespaced: true,
  state:{
    // 解决params传参,F5 刷新后参数丢失问题
    pathParams: {}
  },
  // 中间其余模块不影响已删除
  action:{
    setPathParams123({ commit },payload){
      console.log(payload,'--------');
      commit(CHANGEPATHPARAMS,payload);
    }
  }
}
export default moduleUsers
// 使用vuex方法
const store = useStore();
    const goDetail = (e) => {
      // 此处一直报错 [vuex] unknown action type: moduleUsers/setPathParams123
      // 无论 namespaced 是否为true都在报错,
      store.dispatch('moduleUsers/setPathParams123', { picUrl: e.picUrl })
      router.push({
        name: 'personalizedDetail',
        // query: { picUrl: e.picUrl }
      });
    }

因为在是自己研究vue3使用,所以函数命名就随意一些,
因为有了问题二的报错,无法解决,才给使用问题一的方式
然后问题一也报错了,依然无法解决,发帖询问各位大佬
thanks

阅读 3k
1 个回答

你直接在 actions 的方法里 dispatch 当然不行,相当于在当前的环境,直至全局查找 dispatch 方法,它是不存在的。应该是如下这样,相当于使用第一个参数的 dispatch 属性:

{
  actions: {
    async foo({ dispatch }, payload) {
      dispatch('bar');
    }
  }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏