[英]How to update only one value in nested array of Redux state?
考虑以下状态:
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,
}
如何更新只是posts
的阵列ÌDs
的数组bookmarks
数组? 我尝试了这个:
case 'SET_USER_BOOKMARKED_POSTS':
return {
...state,
bookmarks: {
IDs: {
posts: action.payload
}
}
}
但是,当我将状态记录到控制台时, IDs
数组仅包含posts
,而opps
和news
数组不再存在。
您还需要对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
}
}
}
但这不是很方便,最好用lodash合并
我们这样做的方法是使用Object.assign
基本上指向并更新redux状态的字段的非变异方法。 就像是:
return Object.assign({}, state.bookmarks, {
IDs: action.payload,
});
这将确保您不改变状态,并返回新的书签。 您可以根据需要调整此值以返回整个状态,这取决于您是否需要更新中的其他数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.