【发布时间】:2019-02-12 15:12:48
【问题描述】:
大家好,我有一个问题,从一开始我会提到我已经尝试过this和this
我的情况如下。我有 API,它发送给我
Root 处于组件状态!
Root: {
RootVal1: {
Prop1: '',
Prop2: '',
Prop3: '',
}
RootVal2: [
PropObj1: {
NestedProp1: '',
NestesPropObj: {
NestedEvenMoreProp1: '',
NestedEvenMoreProp2: '',
NestedEvenMoreProp3: ''
}
},
PropObj2: {
NestedProp1: '',
NestesPropObj: {
NestedEvenMoreProp1: '',
NestedEvenMoreProp2: '',
NestedEvenMoreProp3: ''
}
},
PropObj3: {
NestedProp1: '',
NestesPropObj: {
NestedEvenMoreProp1: '',
NestedEvenMoreProp2: '',
NestedEvenMoreProp3: ''
}
},
]
}
如何使用setState 更新Prop1、Prop2、Prop3、NestedEvenMoreProp1、NestedEvenMoreProp2、NestedEvenMoreProp3?
最后一个限制是我无法更改 root 的名称(我无法将其重命名为 newRoot 等)
我尝试的是调用这个函数:
/**
* @summary update state using immutable object
* @param {Object} name of key and value for update
* @returns {string} Promise that returns
*/
updateStateHelper = target => new Promise((resolve) => {
const updatedState =
update(this.state[target.name], { $merge: { [target.name]: target.value } });
this.setState(prevState => ({
...prevState,
updatedState,
}), () => resolve(this.state[target.name]));
});
这样:
// data[0] and data[1] is just copy of RootVal2 and RootVal1, with changed values.
data[0]
data[1]
const root = Object.assign({}, this.state.root);
root.RootVal2 = [...data[0].RootVal2];
root.RootVal1 = {...data[1]};
//Here root displays edited
console.log(root);
this.updateStateHelper({name: 'root', value: root,})
.then(() => {
//Here root displays without the edit
console.log(this.state.root);
resolve('Success');
});
【问题讨论】:
-
请显示您尝试过的内容的 sn-p。您提到的第二个链接应该已经回答了您的问题,所以我猜您遗漏了一些东西
-
@TelmoDias OP 在他的问题中给出了完全相同的链接
-
@Logar 我编辑了帖子,并举了我试过的例子。
-
@Trefl 抱歉,但我现在没有时间玩它,这里有一个如何更新你的状态的快速示例,希望它对你来说足够了:repl.it/repls/CourteousAngelicOctagon
标签: javascript reactjs