调度动作后更新商店

Updating Store after Dispatching an Action

我有一个社交媒体网站,用户可以在其中 like/dislike posts。我有一个用于用户和 post 的减速器。我的小组伙伴实现了 like/dislike 功能,如下所示:每当用户喜欢 post 时,客户端调用我的 API 和 ENDPOINT 'posts/:id/like',这将增加Post 数据库 中的 post 并将 post 添加到 User 中用户喜欢的 posts 数组数据库。 API 将 return 包含更新的用户和 post 的响应,这将导致以下操作。

dispatch({
            type: LIKE_POST_SUCCESS,
            payload: res.payload.post
        })

        dispatch({
            type: UPDATE_USER_SUCCESS,
            payload: res.payload.user
        })

以及以下减速器

case LIKE_POST_SUCCESS:
            return {
                ...state,
                ...action.payload
            }
case UPDATE_USER_SUCCESS:
            return {
                ...state,
                ...action.payload
            }

这种方法行得通,但我觉得他的方法在这方面显得老套

  1. API 请求也 return 将更新的用户与更新的 post 一起发送,即使 ENDPOINT 用于 posts数据库.
  2. 他正在调度“UPDATE_USER_SUCCESS”来更新 redux 存储中的用户对象,即使没有调用更新用户 API。

正确的做法是

  1. 调用点赞Post请求
  2. 使用来自 Like Post 请求
  3. 的负载更新 post 存储
  4. 对用户数据库执行“GET”请求
  5. 使用来自“GET”请求的负载更新用户存储

根据你的问题,基本上需要做的是当用户喜欢post时,首先应该更新Post数据库,只有在它成功响应后,你才必须更新用户的数据库。 因此,您提到的方法似乎是应该遵循的正确方法。

是的,我同意你的方法,是的,他的方法很老套。
IMO,如果 POST 失败,他会继续派遣到商店。这将导致错误的数据。 或者如果后端 api return 201 状态代码但有错误,例如用户未在后端更新但在前端您假设用户已更新。因此,它会导致前端数据错误。