Javascript 在ES6中将对象分解为参数
我正在学习关于react的教程,对于这个新手问题我很抱歉,但我想知道,当我们从api获取数据时,为什么我们需要解构此行中的参数: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() )
.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}
。另见