【发布时间】:2017-07-18 14:40:31
【问题描述】:
在 React 中更新有状态组件时,如果组件使用当前状态来更新新状态,这被认为是一种不好的做法。
例如,如果我有一个类来存储过滤器是否处于打开状态,那么这些用于更新状态的选项之一在性能方面是否比另一个更可取?
选项 1:
class Container extends Component {
state = {
show: false
}
show = () => this.setState({ show: true })
hide = () => this.setState({ show: false })
render() {
<ExternalComponent
show={this.show}
hide={this.hide}
/>
}
}
选项 2:
class Container extends Component {
state = {
show: false
}
toggleVisibility = () => this.setState({ show: !this.state.show })
render() {
<ExternalComponent
toggleVisibility={this.toggleVisibility}
/>
}
}
选项 3:
class Container extends Component {
state = {
show: false
}
setShow = (newVal) => this.setState({ show: newVal })
render() {
<ExternalComponent
setShow={this.setShow}
/>
}
}
【问题讨论】:
-
我不明白为什么这会被认为是不好的做法,除了状态更改是异步和可合并的。这可能是一个合理的担忧——你可能得不到你所期望的。我个人更喜欢选项#3。
-
这确实是一种不好的做法,出于您提到的原因,存在合理的担忧,并且还概述了in the docs。
标签: javascript reactjs setstate