提问人:Aman Ghanghoriya 提问时间:2/17/2023 最后编辑:Aman Ghanghoriya 更新时间:2/17/2023 访问量:161
JavaScript 中 Map 的传播语法
Spread syntax for Map in JavaScript
问:
在我的 React 项目(聊天应用程序)中,我正在使用 ,我想用 代替 as 状态。redux toolkit
Map
object literal {}
chatMap state
包含 contactId() 作为键,包含聊天数组作为值。mongodb _id
类似的东西——
chatMap =
{
[contactId1]: [chatsArr1],
[contactId2]: [chatsArr2]
}
(chatSlice.js)
const initialState = {
chatMap: new Map(),
...
}
reducers: {
setChatMap: (state, action) => {
state.chatMap = {...chatMap, key1: action.payload}
},
...
}
如何更新 chatMap (Map) 状态?
答:
1赞
msx47
2/17/2023
#1
你可以做这样的事情。
reducers: {
setChatMap: (state, action) => {
state.chatMap = new Map(state.chatMap).set('key1', action.payload)
},
...
}
评论
0赞
Aman Ghanghoriya
2/17/2023
我只能接受一个答案。
0赞
Shakya Peiris
2/17/2023
#2
首先,您可以将地图转换为对象,然后展开它。再次将最终对象转换为地图。
reducers: {
setChatMap: (state, action) => {
const obj = object.fromEntries(chatMap);
const tCM = {...obj, key1: action.payload};
state.chatMap = new Map(tCM);
},
...
}
1赞
Ayudh
2/17/2023
#3
这就是你要找的:
reducers: {
setChatMap: (state, action) => {
state.chatMap = new Map([...chatMap, [key1, action.payload]])
},
...
}
0赞
Versaroumane
2/17/2023
#4
你的问题依赖于这样一个事实,即 React 现在可以知道你的对象(Map)是否发生了变化,因为它比原语要复杂一些,你需要对该对象进行所谓的深度复制。
通过传递一个新对象,react 将看到一个新的引用,然后触发一个新的渲染。
干杯 😉
评论
0赞
Aman Ghanghoriya
2/17/2023
感谢您在回答中提到的有用参考链接。
评论