Javascript 如何为Redux状态项生成新密钥?
我很难弄清楚用新键向React/Redux状态添加新项的最佳实践是什么 鉴于国家:Javascript 如何为Redux状态项生成新密钥?,javascript,reactjs,redux,react-redux,Javascript,Reactjs,Redux,React Redux,我很难弄清楚用新键向React/Redux状态添加新项的最佳实践是什么 鉴于国家: const initialState = { "routines": { "1": { "id": 1, "name": "Routine 1", }, "2": { "id": 2, "name": "Routine 2", } } } 假设我想在此状态中添加一个新项。我应该把产生新ID的逻辑放在哪里 该属性是否应为表单的
const initialState = {
"routines": {
"1": {
"id": 1,
"name": "Routine 1",
},
"2": {
"id": 2,
"name": "Routine 2",
}
}
}
假设我想在此状态中添加一个新项。我应该把产生新ID的逻辑放在哪里
import { ADD_ROUTINE } from '../actions/routineActions'
function routineReducer(state={}, action) {
switch (action.type) {
case ADD_ROUTINE:
newState = {...state}
number_of_keys = Object.keys(newState).length
new_id = number_of_keys + 1
return {
...state,
new_id: {
id: new_id,
name: action.name,
days: []
}
}
default:
return state
}
}
export default routineReducer
以下是我对结构变更的意见和建议,以下是我将如何编写您的减速机:
从“../actions/routineActions”导入{ADD_ROUTINE}
//重要提示:这假设要更改结构
//将初始状态更改为以下状态:
//例程=[
//{id:1,名称:'routine 1'},
//{id:2,名称:'routine 2'},
// ]
函数RoutineEducer(状态=[],操作){
开关(动作类型){
案例添加程序:
返回[
……国家,
{
id:state[state.length-1].id+1,
名称:action.payload,
}
]
违约:
返回状态
}
}
导出默认路由导出器
我觉得这很好。减速器用于计算新状态,您可以在计算中使用旧状态。仅供参考,减速器中有一个小虫子。尝试[new_id]:{
而不是new_id:{
只要不删除例程,基于长度的id(即前一状态中的例程数量)就可以工作。最好是获取前一状态中的最后一个例程,并将其id增加1。我个人也会更改“例程”的结构对象,但这是另一个讨论。或者,您可以使用类似于生成RFC兼容的unique的包IDs@Jaxx谢谢!我来看看那个软件包!出于好奇,将例程作为数组与对象相比有什么好处。@BenLorantfy谢谢你指出这一点,我会解决它:)我们应该使用state.l长度!==0?状态[state.length-1]。id+1:1,因为如果长度==0,我们会得到错误