Javascript 如何在Redux store中按id存储项目
我正在React应用程序中使用Redux。但是,项目总是通过Javascript 如何在Redux store中按id存储项目,javascript,reactjs,react-redux,Javascript,Reactjs,React Redux,我正在React应用程序中使用Redux。但是,项目总是通过索引存储,如=> 我想通过ids来存储它们,比如第一项的索引应该是41,而不是0。我该怎么做 reducer.js 导出函数ratedPosts(状态=[],操作){ 使能5() 返回( 生产(州,草案=>{ 常数速率=动作速率 开关(动作类型){ 个案率(职位): draft.unshift({postId:action.postId,rate:rate}) 打破 病例率\u更新后\u: draft.map(post=>post.p
索引存储,如=>
我想通过ids
来存储它们,比如第一项的索引应该是41,而不是0
。我该怎么做
reducer.js
导出函数ratedPosts(状态=[],操作){
使能5()
返回(
生产(州,草案=>{
常数速率=动作速率
开关(动作类型){
个案率(职位):
draft.unshift({postId:action.postId,rate:rate})
打破
病例率\u更新后\u:
draft.map(post=>post.postId==action.postId).rate=rate
打破
违约:
退票
}
})
)
}
不能使用数组,但可以使用对象。我还看到您正在使用Array.unshift添加新帖子,请记住,数组不能保证项目的顺序,即使它在大多数情况下都有效
您需要将数据结构转换为使用对象而不是数组,但是在getter函数中,您可以将其转换为数组,以便在前端更容易使用
您可以使用[]
let myObject = {}
const idOne = 'abc'
const idTwo = 'def'
draft[idOne] = "Hello" // draft.abc === "Hello"
draft[idTwo] = "World" // draft.def === "World"
draft === {
abc: "Hello",
def: "World"
}
您需要使用对象
而不是数组
。您需要更改数据结构。@SajeebAhamed所以将state=[]
更改为state={}
会有所帮助,对吗?将ratedPosts=[]
更改为ratedPosts={}
@altf4对于那些没有得到答案的人,我使用了对象。分配({},state,{…})
将我的数据转换为对象。