如何将 api 的结果与来自 Vuex 的操作一起使用

Posted

技术标签:

【中文标题】如何将 api 的结果与来自 Vuex 的操作一起使用【英文标题】:How to use result of api with actions from Vuex 【发布时间】:2021-10-23 14:38:04 【问题描述】:

当用户登录时,我正在尝试通过 axios 检索用户收藏。 为此,我将 Vuejs 与 Vuex 一起使用。关于日志记录过程的所有内容都可以,但是关于收藏夹,我遗漏了一些东西,但我不知道是什么。

我的store.ts是这样的:

export const store = createStore(
    state: 
        user: null,
        token: null,
        favorites: []
    ,

    mutations: 
        setUser(state, user) 
            state.user = user;
        ,
        setToken(state, token) 
            state.token = token;
        ,
        setFavs(state, favorites) 
            state.favorites = favorites;
        ,
    ,
    actions: 
        getFavorites( commit ) 
            axios
                .post("URL_HERE", 
                    userId: this.state.user,
                )
                .then((res) => 
                    //console.log(res);
                    commit('setFavs', res.data)

                )
                .catch((error) => 
                    console.log(error);
                )
        
    ,
    getters: 
        getFavs: (state) => state.favorites
    ,
);

在我的收藏夹组件中有:

export default defineComponent(
  name: "Favorites",
  data() 
    return 
      favorites: null,
    ;
  ,
  computed: 
    ...mapGetters(["isLoggedIn"]),
    ...mapGetters( Favorites: "getFavs" ),
  ,
);

然后在模板中:

<div v-for="favorite in Favorites" :key="favorite.event_id">
 <li> favorite </li>
</div>

【问题讨论】:

【参考方案1】:

您需要在挂载的钩子中调度操作:

export default defineComponent(
  name: "Favorites",
  data() 
    return 
      favorites: null,
    ;
  ,
  computed: 
    ...mapGetters(["isLoggedIn"]),
    ...mapGetters( Favorites: "getFavs" ),
  ,
 methods:
  ...mapActions(['getFavorites'])//map the actions as you did with getters
 ,
 mounted()
  this.getFavorites();//dispatch the action
,
//or use a watcher
watch:
isLoggedIn(newVal,oldVal)
  if(newVal)
        this.getFavorites()
   



);

【讨论】:

哦,好的,我现在明白了!如何动态监听显示它而不是“挂载”钩子? 你可以使用像@click="getFavorites"这样的事件来调度它 登录时,我使用突变来存储用户 ID。只有设置了这个,我才需要检索收藏夹 您可以使用我在编辑后的答案中提到的观察者 这么简单.. 好吧,我想我必须了解更多有关访问数据的知识,谢谢老兄!

以上是关于如何将 api 的结果与来自 Vuex 的操作一起使用的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Vuex mapGetters 与 Vue 3 SFC 脚本设置语法一起使用?

Vuetify 使用带有 Vuex 的 API 的外部数据的数据表

如何从 vuex 操作中调用 bootstrap-vue 模态和 toast?

如何将 Clockify API 与 Siri Shortcuts 一起使用

如何将嵌入查询与 wordpress rest api 一起使用?

Vuex 在异步操作完成之前访问状态