使用给定的用户 ID 上下文更新对象道具 api 做出反应
updating object props with given users id context api react
我正在尝试使用上下文更新用户数据 API - 我让它工作了,所以它根据他们的用户 ID 单独执行 - 所以在这个意义上
如果我想更新用户的头像我可以
case 'UPDATE_USER_AVATAR':
const { userId, avatar } = action.user
const user = {
...state.users.find((c: User) => c.userId === userId),
avatar,
}
return {
...state,
users: state.users.map((c: User) => {
return c.userId !== userId ? c : user
}),
}
我这样更新用户名
case 'UPDATE_USER_NAME':
const { user_id, name } = action.user
const userName = {
...state.users.find((c: User) => c.userName === user_id),
name,
}
return {
...state,
users: state.users.map((c: User) => {
return c.userName !== user_id ? c : userName
}),
}
这对我有用,但现在我无法添加更多内容 - 例如,我想添加或更改用户的 phone 号码或其他内容 - 我必须创建另一个新的reducer - 有没有一种方法可以在一个 reducer 中完成所有这些工作,而不是为不同的情况创建多个?
您只能编写一个函数来更新用户信息,如下所示:
case 'UPDATE_USER':
const { user_id, ...userInfor } = action.user
return {
...state,
users: state.users.map((c: User) => {
return c.userName !== user_id ? c : {...c, ...userInfor}
}),
}
像这样解构你的action.user
。
const { user_id, ...other } = action.user
然后像这样创建一个用户对象。
const user = {
...state.users.find((c: User) => c.userName === user_id),
...other
};
最后照常传递给map
。
return {
...state,
users: state.users.map((c: User) => {
return c.userName !== user_id ? c : user // Pass user object to here.
}),
}
现在您可以根据需要传递有关用户的任何信息。
如果您需要有关 JavaScript 解构的更多信息,请参阅此 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment
如果您需要进一步的支持,请告诉我。
我正在尝试使用上下文更新用户数据 API - 我让它工作了,所以它根据他们的用户 ID 单独执行 - 所以在这个意义上
如果我想更新用户的头像我可以
case 'UPDATE_USER_AVATAR':
const { userId, avatar } = action.user
const user = {
...state.users.find((c: User) => c.userId === userId),
avatar,
}
return {
...state,
users: state.users.map((c: User) => {
return c.userId !== userId ? c : user
}),
}
我这样更新用户名
case 'UPDATE_USER_NAME':
const { user_id, name } = action.user
const userName = {
...state.users.find((c: User) => c.userName === user_id),
name,
}
return {
...state,
users: state.users.map((c: User) => {
return c.userName !== user_id ? c : userName
}),
}
这对我有用,但现在我无法添加更多内容 - 例如,我想添加或更改用户的 phone 号码或其他内容 - 我必须创建另一个新的reducer - 有没有一种方法可以在一个 reducer 中完成所有这些工作,而不是为不同的情况创建多个?
您只能编写一个函数来更新用户信息,如下所示:
case 'UPDATE_USER':
const { user_id, ...userInfor } = action.user
return {
...state,
users: state.users.map((c: User) => {
return c.userName !== user_id ? c : {...c, ...userInfor}
}),
}
像这样解构你的action.user
。
const { user_id, ...other } = action.user
然后像这样创建一个用户对象。
const user = {
...state.users.find((c: User) => c.userName === user_id),
...other
};
最后照常传递给map
。
return {
...state,
users: state.users.map((c: User) => {
return c.userName !== user_id ? c : user // Pass user object to here.
}),
}
现在您可以根据需要传递有关用户的任何信息。
如果您需要有关 JavaScript 解构的更多信息,请参阅此 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment
如果您需要进一步的支持,请告诉我。