React native 当关键帧是动态的时,是否使用扩展运算符更改Redux中的嵌套对象?

React native 当关键帧是动态的时,是否使用扩展运算符更改Redux中的嵌套对象?,react-native,react-redux,React Native,React Redux,我试图在redux中存储嵌套对象,但我使用的是动态键。下面是一个示例,展示了它的外观: // In my Redux Reducer const initialState = { stuff: { <dynamic_key>: { name: 'bob', title: 'mr' }, <dynamic_key>: { name: 'eve', title: 'ms' }, <dynamic_key>:

我试图在redux中存储嵌套对象,但我使用的是动态键。下面是一个示例,展示了它的外观:

// In my Redux Reducer
const initialState = {
    stuff: {
        <dynamic_key>: { name: 'bob', title: 'mr' },
        <dynamic_key>: { name: 'eve', title: 'ms' },
        <dynamic_key>: { name: 'car', title: 'na' },
    },
};
上面尝试创建/更新整个
,使用
action.key
作为动态键,
action.name
作为名称,
action.title
作为标题

另外一个要点是,如果redux存储
stuff
中不存在
action.key
(动态键),则应该创建它,而不是出错

我做错了什么?我想我没有正确使用Object.assign(),或者没有正确使用spread运算符

编辑:

以下是我的redux操作:

export const update = s => ({ type: "UPDATE", payload: {key: s.key, name: s.name, title: s.title} });

在你的情况下,你似乎有一些额外的不必要的步骤。如果stuff应该是包含动态键/值对的对象,那么您应该具有:

stuff: Object.assign({}, state.stuff, {[action.key]: {etc...}})

请记住,Object.assign的每个参数都必须是对象。似乎您正在为第二个参数提供一个字符串。 我还假设您已经有了一个编译器,它允许您安全地使用对象扩展语法


编辑:将state.stuff添加到两个示例中,以免覆盖以前的属性。

我一直将
undefined
作为键,将
undefined
作为名称和标题。我仔细检查了
操作
是否得到了正确的值,因为我安慰了他们。上一个示例是否覆盖了我在
stuff
存储区中已有的所有其他键?是的,它会覆盖,但是Object.assign也会覆盖,除非将原始stuff对象作为第二个参数传入。您可以对扩展语法执行相同的操作:stuff:{…originalStuff[action.key]:etc…}另外,您在哪里记录action的值?你能发布整个函数吗?我用我的redux操作更新了我的帖子。它基本上只需要一个参数,然后直接卸载到有效负载中。你能用你的日志发布整个减速器来确认操作的内容吗?谢谢,我重新阅读了spread ops的文档,你的评论真的很有帮助。
…originalStuff
是缺少的部分,我也缺少一个结束括号。我坚持使用排列操作,而不是像你建议的那样分配对象。
stuff: Object.assign({}, state.stuff, {[action.key]: {etc...}})
stuff: {
  ...state.stuff
  [action.key]: {name: etc...}
}