gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 22:22:01 26 4
gpt4 key购买 nike

我有一个用户模型,其中有一个名为 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com