具有可变索引的深度变化状态

rru*_*r81 0 javascript reactjs redux

我正在尝试按照Cleaner /更短的方式中的说明更新Redux中的嵌套状态?[接受的答案]

事情就是在我的特殊情况下,我有一个层真的取决于用户在那一点上选择的模型.我的结构:

我的结构

现在在我的reducer中,我已经尝试过(只想将最喜欢的叶子改为true):

let newStateForFavorites = {...state, models: {
            ...state.models,
            62416: {
                ...state.models.62416,
                details: {
                    ...state.models.62416.details,
                    favorited: true
                }
            }
        }};
Run Code Online (Sandbox Code Playgroud)

Javascript抱怨.如果我尝试将其提取到var:

const currentModelToFav = action.payload.model_id;
let newStateForFavorites = {...state, models: {
            ...state.models,
            currentModelToFav: {
                ...state.models.currentModelToFav,
                details: {
                    ...state.models.currentModelToFav.details,
                    favorited: true
                }
            }
        }};
Run Code Online (Sandbox Code Playgroud)

Javascript不关联const.而且错误out -currentModelToFav未定义 -

关于我做错了什么的想法?谢谢!

Tit*_*tus 5

如果要将变量用作属性名称,则必须使用以下构造:

{[variableName] : value}
Run Code Online (Sandbox Code Playgroud)

{propertyName : variable[variableName]}
Run Code Online (Sandbox Code Playgroud)

所以,你的对象文字将成为:

const currentModelToFav = action.payload.model_id;
let newStateForFavorites = {...state, models: {
        ...state.models,
       [currentModelToFav]: {
            ...state.models[currentModelToFav],
            details: {
                ...state.models[currentModelToFav].details,
                favorited: true
            }
        }
    }};
Run Code Online (Sandbox Code Playgroud)