ReactJs中的Object.assign({},obj)替换json对象

时间:2019-06-12 05:00:58

标签: json reactjs

我有JSON的{​​{1}}请求调用,如下所示:

fetch

我想将另一个[{ "nameSecond": "", "Id": "", "First": { "nameFirst": "", "Id": "" } }, { "nameSecond": "", "Id": "", "First": { "nameFirst": "", "Id": "" } }, { "nameSecond": "", "Id": "", "First": { "nameFirst": "", "Id": "" } }, { "nameSecond": "", "Id": "", "First": { "nameFirst": "", "Id": "" } } ] 的对象替换为此JSON的每个对象。 将要添加到第一个JSON的第二个JSON看起来像这样:

JSON

我所做的是,运行[{ "nameFirst": "", "id": "" }, { "nameFirst": "", "id": "" }, { "nameFirst": "", "id": "" }, { "nameFirst": "", "id": "" }] 时,单击的对象将被第一个ChangeObjectFirst的对象First替换,并且将显示新数据。

JSON

我使用 <div onClick={((e) => this.ChangeObjectFirst(e, i))}>Change</div> 来替换对象,但是 主要的问题是,这将是第一次。第二次或更多次单击的对象将不会被对象Object.assign({}, itemToReplace)取代,并且会有First

TypeError: el is undefined

1 个答案:

答案 0 :(得分:1)

问题在于更新时,您还没有从地图返回新数据。另外,由于您使用库变量进行渲染,因此您需要在更新数据后调用reorganiseLibrary。更好的无变异实现如下所示

ChangeObjectFirst = (e, i) => {
    const itemToReplace = this.state.libraryNew[i];
    let { data } = this.state;
     data = data.map((el, idx) => {
         return Object.assign({}, el, { First: itemToReplace});
    });
    this.setState({ data: data }, ()=> {this.reorganiseLibrary()});
}