Javascript 如何在Redux store中按id存储项目

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

我正在React应用程序中使用Redux。但是,项目总是通过
索引存储,如=>

我想通过
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,{…})
将我的数据转换为
对象。