javascript - 使用 Axios 和 Redux 更新用户字段

标签 javascript reactjs express axios

我有一个用户模型,其中有一个名为 favorites 的数组字段

const userSchema = new mongoose.Schema({  username: { type: String, unique: true },  firstName: String,  email: String,  passwordHash: String,  favorites: [Array]});

如果用户点击某个项目,我希望将该项目保存在用户的“收藏夹”字段中

这是我在 map 中处理 onClick 的按钮,其中 card 是用户单击的单个项目。

我还有一个名为loggedUser的状态,它保存当前登录用户的状态。

onClick={addFavorite(card, props.loggedUser)}

和 addFavorite 处理程序:

const addFavorite = (card, user) => {
    props.updateUser(card, user);
  };

然后是我的“userReducer”文件中的操作创建者,它采用卡和用户变量

 

export const updateUser = (card, user) => {
  return async dispatch => {
    dispatch({
      type: "UPDATE_USER",
      data: {
        card: card, user: user
      }
    });  

通过我的 reducer ,我将单击的用户变量保存在 userToChange 变量中。然后,我尝试将卡片数据连接到用户的收藏夹数组中。

   const userReducer = (state = [], action) => {
  switch (action.type) {
    case "NEW_USER":
      return [...state, action.data];
    case "UPDATE_USER":
      console.log("Action Data", action.data);
      const userToChange = action.data.user;
      console.log("User to Change", userToChange);
      const changedUser = userToChange.favorites.concat(action.data.card);
      userService.update(changedUser);
      return action.data;
    case "DELETE_USER":
      const removeObject = action.data;
      return state.filter(user => user.id !== removeObject.id);
    case "INIT_USERS":
      return action.data;
    default:
      return state;
  }
};

当我点击收藏夹按钮时 - 我收到此错误:无法读取指向 reducer 中这一行的未定义属性“user”:

 const userToChange = action.data.user;

注意这里也是我的 axios put 调用

const update = async user => {
  const response = await axios.put(`${baseUrl}/${user.id}`, user);
  return response.data;
};

以及我的快速路线:

userRouter.put("/:username", async (request, response, next) => {
  const body = request.body;
  const updateUser = {
    favorites: [body.favorites]
  };
  console.log("updateUser", updateUser);
  console.log("id", request.params.id);
  try {
    await User.findOneAndUpdate(username, updateUser, {
      new: true
    });
    response.status(204).end();
  } catch (error) {
    next(error);
  }
});

我可能哪里出错了?

最佳答案

你能发布完整的 reducer 吗?

定义中应该有这样的内容:

function reducer (state = initialState, action) {
  const { type, response, payload, data } = action
....

也许你没有在reducer函数中定义action参数,当然你的reducer不知道“action.data”是什么意思

---- 已编辑 ---- 您是在有状态组件还是无状态组件中执行此操作?也许你打错了电话。

如果您使用的是无状态,请执行以下操作:

onClick={() => props.addFavorite(card, props.loggedUser)}

如果您使用的是有状态的,请执行以下操作:

onClick={() => this.props.addFavorite(card, this.props.loggedUser)}

关于javascript - 使用 Axios 和 Redux 更新用户字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59201497/

相关文章:

javascript - 添加 animate.css 类,然后使用 remove 删除元素

javascript - 更改 javascript 缩略图的 alpha 级别

javascript - 动态生成的按钮上的 React.js Onclick 事件未触发

javascript - Node : Mocha TDD sending Array in body

javascript - 如何从匹配中仅获取完全匹配的字符串

javascript - HTML 中的上下数字?

javascript - 如何使用 reducer 和处理事件从事件数组中更新事件?

reactjs - 如何使用 React Hooks 为 Ref 元素添加 onClick 事件?

node.js - Express JS不渲染jade模板

arrays - 如何在 Express 中的 db 调用后展平数组?