我正在使用Typescript开发一个Nextjs应用程序,希望更新一个嵌套的对象状态。下面是状态的样子:
const initialState ={
userInfo: string | null
isLoading: boolean,
cursorState: boolean,
companyProfile:{
companyDescription?: string
companyLogo?: string
companyLogoPublicId?: string
companyName?: string
owner?: string
_id?: string
}
}
这是reducer函数:
const Reducer = (state: initialStateAttributes, action: actionAttributes) => {
switch(action.type) {
case actionEnum.COMPANY_PROFILE_DATA:
return {
...state,
companyProfile: {
...state.companyProfile,
companyDescription: action.payload,
companyLogo: action.payload,
companyLogoPublicId: action.payload,
companyName: action.payload,
owner: action.payload,
_id: action.payload
}
}
}
}
我通过API响应数据调度动作来更新状态,如下所示:
const res = await axiosPrivate.get<axiosGetCompanyProfile>(
`/getcompany`,
{
withCredentials: true,
headers: {
Authorization: `${data?.user.token}`
}
}
);
dispatch({
type: actionEnum.COMPANY_PROFILE_DATA,
payload: res?.data
});
我想在每次更新时更新companyProfile
值的整个状态。我不是一次只针对一个值。我想在每次更新时更改所有值。我尝试的当前方法只是创建每个companyProfile
值,每个值上都有所有有效负载。
我该如何处理这个问题?
1条答案
按热度按时间fnx2tebb1#
我想在每次更新时更新companyProfile值的整个状态。我不是一次只针对一个值。我想在每次更新时更改所有值。
如果我的理解正确的话,听起来你想用action payload值更新整个
state.companyProfile
值。应该浅复制正在更新的任何状态和嵌套状态,然后覆盖要更新的属性。如果要将新的
companyProfile
数据与现有的state.companyProfile
状态“合并”,则继续“浅拷贝,然后覆盖”模式。