Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在ES6中将对象分解为参数_Javascript_Ecmascript 6 - Fatal编程技术网

Javascript 在ES6中将对象分解为参数

Javascript 在ES6中将对象分解为参数,javascript,ecmascript-6,Javascript,Ecmascript 6,我正在学习关于react的教程,对于这个新手问题我很抱歉,但我想知道,当我们从api获取数据时,为什么我们需要解构此行中的参数: .then( ({results: items}) => this.setState({items})) componentWillMount(){ fetch( 'https://swapi.co/api/people/?format=json' ) .then( response => response.json() )

我正在学习关于react的教程,对于这个新手问题我很抱歉,但我想知道,当我们从api获取数据时,为什么我们需要解构此行中的参数:

.then( ({results: items}) => this.setState({items}))

componentWillMount(){
    fetch( 'https://swapi.co/api/people/?format=json' )
      .then( response => response.json() )
      .then( ({results: items}) => this.setState({items}))
}
我想知道的是,为什么我们不能将
response.json()
的结果作为普通参数传递,如下所示:

.then( (items) => this.setState({items}))

我不知道该API响应的数据结构,但假设代码正常工作,您“需要”对其进行解构,因为您正在接收的数据对象类似于{results:items,…..},但您不想对该对象的其余部分做任何事

显然,你不需要严格地这样做。您可以像这样做
result=>this.setState({items:result.items})
,但我认为您可以同意我的说法,这有点不紧凑


最后是一个偏好的问题,但我个人更喜欢代码在解构时的外观。

我不知道该API响应的数据结构,但假设代码正常工作,您“需要”解构,因为您接收的数据对象类似于{results:items,…..},但是您不想对对象的其余部分做任何事情

显然,你不需要严格地这样做。您可以像这样做
result=>this.setState({items:result.items})
,但我认为您可以同意我的说法,这有点不紧凑


最后是一个偏好的问题,但我个人更喜欢代码在解构时的外观。

您不需要解构:

.then( res => this.setState({items: res.result }))
或:


您不需要销毁:

.then( res => this.setState({items: res.result }))
或:


很简单,如果你看一下你将看到的响应,它的结构如下

{
 count: 0,
 results: ...
 ...
}

正如您所看到的,它是一个对象,它的一个属性称为results。在这种特殊情况下,您似乎不关心其他信息,只想获取结果,这是一个数组。如果只传递回调的返回值,而不进行分解,则会将状态设置为一个全新的对象。

如果查看具有如下结构的响应,这很简单

{
 count: 0,
 results: ...
 ...
}
正如您所看到的,它是一个对象,它的一个属性称为results。在这种特殊情况下,您似乎不关心其他信息,只想获取结果,这是一个数组。如果只传递回调的返回值而不进行分解,则会将状态设置为一个全新的对象。

让我们一步一步来

fetch( 'https://swapi.co/api/people/?format=json' )
      .then( response => response.json() )
      .then( ({results: items}) => this.setState({items}))
fetch
返回解析为响应对象的承诺
response.json()。每次您在
then()
上返回一个承诺时,它都会沿着链传递,因此您在下一个
then
上得到它作为输入。最后,响应体包含的JSON对象的形式可能是
{results,…}
。在最后一次获取时,解构将获取该JSON,提取
results
键中包含的任何内容,并将其重命名为
items
,以便您可以在回调中将其作为名为
items
的变量引用

如果不进行分解,最后一个
然后的
将需要具有以下形状:

.then(responseBodyAsJSON => this.setState({items: responseBodyAsJSON.results }))
让我们一步一步走

fetch( 'https://swapi.co/api/people/?format=json' )
      .then( response => response.json() )
      .then( ({results: items}) => this.setState({items}))
fetch
返回解析为响应对象的承诺
response.json()。每次您在
then()
上返回一个承诺时,它都会沿着链传递,因此您在下一个
then
上得到它作为输入。最后,响应体包含的JSON对象的形式可能是
{results,…}
。在最后一次获取时,解构将获取该JSON,提取
results
键中包含的任何内容,并将其重命名为
items
,以便您可以在回调中将其作为名为
items
的变量引用

如果不进行分解,最后一个
然后的
将需要具有以下形状:

.then(responseBodyAsJSON => this.setState({items: responseBodyAsJSON.results }))

中回调的返回值。然后(回调)
将成为以下
的输入值。然后(…)
。在本例中,返回值是
response.json()
,它显然返回一个对象
{results:items}
。另请参见
中回调的返回值。然后(回调)
将成为以下
的输入值。然后(…)
。在本例中,返回值是
response.json()
,它显然返回一个对象
{results:items}
。另见