【发布时间】:2016-07-29 01:03:22
【问题描述】:
我知道在为尚未安装的组件设置状态时会引发错误。这解释了我使用 setState 函数而不是显式直接设置状态时遇到的错误。
import React, {Component} from 'react';
class SearchBar extends Component {
constructor(props) {
super(props);
this.state = {term: ''}; // -> seems to be the agreed means to set initial state
// this.setState({term: ''}); // -> generates an error
}
render() {
return (
<div>
<input onChange={event => this.setState({term: event.target.value})}/>
Value of the input: {this.state.term}
</div>
);
}
}
当我取消注释第二行 this.setState({term: ''}) 时出现的错误是:
警告:setState(...):只能更新已安装或正在安装的组件。这通常意味着您在未安装的组件上调用了 setState()。这是一个无操作。请检查组件的代码。
我知道如何防止错误,只需明确设置状态而不告诉 React 任何有关它的信息,我已经看到 github 问题谈论该错误:Github Issue #3878 我想知道的是为什么不能 React 工作出去?如果从构造函数调用 setState 它知道这是第一次使用它?我可能把它简化得太多了,但是如果有人有一个很好的技术答案作为为什么不这样做的原因呢?
【问题讨论】:
-
setState触发了一个漫长而复杂的延迟重新渲染过程。作为一个疯狂的猜测 - 他们只是不想使过程复杂化(甚至更进一步),这反过来会带来 0 的好处。
标签: javascript reactjs constructor state