仅在注销后更新Redux状态

时间:2018-07-03 09:01:20

标签: node.js express redux

我正在尝试通过构建一个小项目来学习redux,但被卡住了。 我想更新mongodb中的用户头像路径,顺便说一句。问题在于,仅当我注销并重新登录后,redux头像状态才不会更新。redux使我感到有些困惑,感觉好像我在这里丢失了一些东西。 代码如下:

AuthReducer:

const initialState = {
  isAuthenticated: false,
  user: {}
};

export default function(state = initialState, action) {
  switch (action.type) {
    case SET_CURRENT_USER:
      return {
        ...state,
        isAuthenticated: !isEmpty(action.payload),
        user: action.payload
      };
    default:
      return state;
  }
}

AuthActions

//Set logged in user

export const setCurrentUser = decoded => {
  return {
    type: SET_CURRENT_USER,
    payload: decoded
  };
};

//Update avatar
export const updateAvatar = userAvatar => dispatch => {
  axios
    .post("/api/users/avatar", userAvatar)
    .then(res => dispatch(setCurrentUser(res.data)))
    .catch(err =>
      dispatch({
        type: GET_ERRORS,
        payload: err.data.response
      })
    );
};

更新功能:

// @route   POST api/users/avatar
// @desc    Upload user avatar
// @access  Private
router.post(
  "/avatar",
  passport.authenticate("jwt", { session: false }),
  (req, res) => {
    const errors = {};
    upload(req, res, err => {
      if (err) {
        errors.uploadErr = err;
        res.status(500).json(errors);
      } else {
        const avatarPath = req.file.path.replace(/\\/g, "/");

        const finalPath = "../" + avatarPath.slice(14);
        User.findOneAndUpdate(
          { _id: req.user.id },
          { $set: { avatar: finalPath } },
          { new: true }
        )
          .then(user => res.json(user))
          .catch(err => res.status(404).json(err));
      }
    });
  }
);

如您所见,我只是将头像图像路径存储在db中并返回用户对象。正如我提到的,保存到mongo效果很好。之后,让用户obj调度SET_CURRENT_USER。 仅在我注销然后重新登录后,状态才会更改。我应该设置一些其他内容吗?

编辑:如果我注销用户,然后通过调用redux动作将其重新登录,则该方法有效。.我认为这不是最佳实践,但我不知道如何正确执行此操作。

0 个答案:

没有答案