Javascript 什么';ReactJs中list:{[id]:array1}和list:{……state.list[id]:array1}之间的区别是什么?

Javascript 什么';ReactJs中list:{[id]:array1}和list:{……state.list[id]:array1}之间的区别是什么?,javascript,reactjs,ecmascript-6,hashmap,spread-syntax,Javascript,Reactjs,Ecmascript 6,Hashmap,Spread Syntax,这是我的状态: state = { list: {} }; 在某些功能中,我将状态更改为: let id = 'ab12' let array1 = [{a: 'hello', b: 'hi'}, {a: 'how', b: 'are'}] this.setState({ list: { ...state.list, [id]: array1 } }); 我不明白我为什么使用(我指的是其他人的代码): 但不是: list: { [id]

这是我的状态:

state = {
    list: {}
};
在某些功能中,我将状态更改为:

let id = 'ab12'
let array1 = [{a: 'hello', b: 'hi'}, {a: 'how', b: 'are'}]
this.setState({
    list: {
        ...state.list,
      [id]: array1
    }
});
我不明白我为什么使用(我指的是其他人的代码):

但不是:

list: {
  [id]: array1
}
对于两者,我在MDN web工具中尝试时得到了相同的结果,这就是我尝试的:

let state = {
    list: {}
}
let id = 'ab12'
let array1 = [{a: 'hello', b: 'hi'}, {a: 'how', b: 'are'}]
state = {
  list: {
    ...state.list, 
    [id]: array1
  }
}
console.log(state.list)
这是:

let state = {
    list: {}
}
let id = 'ab12'
let array1 = [{a: 'hello', b: 'hi'}, {a: 'how', b: 'are'}]
state = {
  list: {
    [id]: array1
  }
}
console.log(state.list)

有什么区别

简而言之:一种方法将旧键值和新键值连接起来,另一种方法将简单地用新对象替换旧对象,新对象将只有一个键


在您的情况下,这两种方式之间并没有区别,因为列表只包含一个键:

list: {
  ...state.list,
  [id]: array1
}


list: {
  [id]: array1
}
假设列表如下所示:

list = {
   name: 'abc',
   address: 'abc',
}
现在您想在此处添加一个数组,通过以下方法,它将向现有对象添加一个新键,而所有其他键将保持不变:

let id = 'ab12';
let array1 = [{a: 'hello', b: 'hi'}, {a: 'how', b: 'are'}];

list = {
   ...list,
   [id]: array1
}

// list = {name: 'abc', address: 'abc', ab12: [...] }
但如果你写:

list = {
   [id]: array1
}

输出将是:
list={ab12:[..]}
仅,名称和地址将被删除。

简而言之:一种方法将连接旧键值和新键值,另一种方法将简单地用新对象替换旧对象,新对象将只有一个键

list: {
  ...state.list,
  [id]: array1
}

在您的情况下,这两种方式之间并没有区别,因为列表只包含一个键:

list: {
  ...state.list,
  [id]: array1
}


list: {
  [id]: array1
}
假设列表如下所示:

list = {
   name: 'abc',
   address: 'abc',
}
现在您想在此处添加一个数组,通过以下方法,它将向现有对象添加一个新键,而所有其他键将保持不变:

let id = 'ab12';
let array1 = [{a: 'hello', b: 'hi'}, {a: 'how', b: 'are'}];

list = {
   ...list,
   [id]: array1
}

// list = {name: 'abc', address: 'abc', ab12: [...] }
但如果你写:

list = {
   [id]: array1
}
输出将是:
list={ab12:[..]}
仅,名称和地址将被删除

list: {
  ...state.list,
  [id]: array1
}
帮助您保留列表中以前的值—只需添加新闻值即可。这就像将以前的值和新值串联在一起。这就像使用Object.assign:如果一个键已经存在,他的值将被更新,否则一个键/值将被添加到对象中。但是这个

list: {
  [id]: array1
}
只需将以前的值替换为新值即可

帮助您保留列表中以前的值—只需添加新闻值即可。这就像将以前的值和新值串联在一起。这就像使用Object.assign:如果一个键已经存在,他的值将被更新,否则一个键/值将被添加到对象中。但是这个

list: {
  [id]: array1
}

只需将以前的值替换为新值即可

我很抱歉没有找到正确的单词来框定我的问题。您能提供您在MDN上尝试过的两个版本吗?提示:如果您设置首字母:
list:{x:'xxx',y:'yyy'},
我很抱歉没有找到正确的单词来框定我的问题。您能提供您在MDN上尝试的两个版本吗?提示:如果您设置首字母:
列表:{x:'xxx',y:'yyy'},