【发布时间】:2017-11-19 08:28:34
【问题描述】:
我有这个代码:
constructor(props) {
super(props)
this.state = {
loginButton: '',
benchmarkList: ''
}
if (props.username == null) {
this.state.loginButton = <GoogleButton></GoogleButton>
} else {
}
}
它给了我一个 ESLint 警告:
不要直接改变状态。使用 setState() 反应/无直接突变状态。
现在我该怎么办,因为我不能在 constructor 中直接使用 setState,因为它会创建 error,并且像这样更新会出错。
【问题讨论】:
-
设置
this.state不必是第一个语句;你可以先设置各种vars,然后用它们组成this.state。 -
只是把这个扔在这里,在状态中存储一个 React 组件可能不是最好的方向
-
确实,更好的解决方案是在渲染对象中使用
{ !this.state.username && <GoogleButton /> }。 -
@rossipedia 为什么会这样,它会减慢渲染或状态变化检测吗?
-
虽然没有什么技术上阻止您这样做,但它违反了将所有 UI 逻辑都放在
render()方法中的惯例。我想不起来了,但我还记得读过一些其他的陷阱。
标签: javascript reactjs