Javascript 如何在Redux状态的嵌套数组中只更新一个值?
考虑以下国家:Javascript 如何在Redux状态的嵌套数组中只更新一个值?,javascript,redux,Javascript,Redux,考虑以下国家: const initState = { id: { data: null, isFetching: false, fetchingError: null }, bookmarks: { IDs: { news: [], opps: [], posts: [] },
const initState = {
id: {
data: null,
isFetching: false,
fetchingError: null
},
bookmarks: {
IDs: {
news: [],
opps: [],
posts: []
},
data: {
news: [],
opps: [],
posts: []
},
isFetching: false,
fetchingError: null
},
role: null,
membership: null,
}
如何仅更新书签数组中ÌDs
数组中的posts
数组?我试过这个:
case 'SET_USER_BOOKMARKED_POSTS':
return {
...state,
bookmarks: {
IDs: {
posts: action.payload
}
}
}
但是当我将状态记录到控制台时,IDs
数组只包含posts
,而opp
和news
数组不再存在。您需要对状态使用扩展操作符。bookmarks.IDs
也与在扩展操作符之后指定键一样,这些键的值将被覆盖
case 'SET_USER_BOOKMARKED_POSTS':
return {
...state,
bookmarks: {
...state.bookmarks
IDs: {
...state.bookmarks.IDs,
posts: action.payload
},
}
}
您需要为state.bookmarks.IDs使用扩展运算符,因为在扩展运算符之后指定键时,键的值将被覆盖
case 'SET_USER_BOOKMARKED_POSTS':
return {
...state,
bookmarks: {
...state.bookmarks
IDs: {
...state.bookmarks.IDs,
posts: action.payload
},
}
}
您需要破坏所有内部结构:
case 'SET_USER_BOOKMARKED_POSTS':
return {
...state,
bookmarks: {
...state.bookmarks,
IDs: {
...state.bookmarks.IDs,
posts: action.payload
}
}
}
但这不是很方便,最好使用您需要破坏所有内部结构:
case 'SET_USER_BOOKMARKED_POSTS':
return {
...state,
bookmarks: {
...state.bookmarks,
IDs: {
...state.bookmarks.IDs,
posts: action.payload
}
}
}
但这不是很方便,最好使用我们使用对象的非变异方法。分配基本上指向并更新处于redux状态的字段。比如:
return Object.assign({}, state.bookmarks, {
IDs: action.payload,
});
这将确保您没有改变状态,并返回新书签。如果愿意,您可以调整此选项以返回整个状态,这取决于您是否需要更新中的其他数据。我们这样做的方式是使用对象的非变异方法。分配以基本上指向并更新处于redux状态的字段。比如:
return Object.assign({}, state.bookmarks, {
IDs: action.payload,
});
这将确保您没有改变状态,并返回新书签。如果愿意,您可以调整它以返回整个状态,这取决于您是否需要更新中的其他数据