【发布时间】:2018-10-05 21:47:37
【问题描述】:
过去几天我一直在学习 React,查看了一些关于编写不同元素的不同方式的教程和解释。但是有一个我一直很好奇 - 用于更新/覆盖组件的 state 属性的 setState 函数。
例如,假设我有一个包含以下内容的类:
class Photos extends React.Component {
constructor() {
super()
state = {
pictures: []
}
}
componentDidMount() {
// This is where the fetch and setState will occur (see below)
}
render() {
return {
<div className="container">
{this.state.pictures}
</div>
}
}
}
这个例子让我从 API 中获取图像。
鉴于我已经为此函数执行了获取、映射和返回 - 然后我将使用 API 调用中获得的结果更新 pictures: [] 状态数组。
我的问题源于我看到的关于如何更新/覆盖图片状态属性的不同方法。
我看到它有两种不同的写法:
1) 这似乎是一个非常简单易读的方法
this.setState({pictures: pics})
2) 这更复杂,但我认为它被描述为一种更安全的方法
this.setState(prevState => ({
pictures: prevState.pictures.concat(pics)
}))
有人可以解释一下使用这两种方法的优点吗?以后想和代码保持一致,处理props和states等,所以当然首选最通用的方法。
【问题讨论】:
-
这两段代码不等价 - 版本 1 将
state.pictures设置为pics,而版本 2 将state.pictures设置为之前的state.pictures,并在末尾附加了pics。 -
@JoeClay,不,不是因为它不是回调,而是 setState 的更新函数
-
@ShubhamKhatri:哎呀,是的,你是对的。撤回了我的近距离投票。
标签: javascript html reactjs