试图弄清楚 React 的基础知识。
查看此页面上的第二个示例:https : //facebook.github.io/react/ 我看到 tick() 函数设置 Timer 类的状态,将先前的值加一。
class Timer extends React.Component {
constructor(props) {
super(props);
this.state = {secondsElapsed: 0};
}
tick() {
this.setState((prevState) => ({
secondsElapsed: prevState.secondsElapsed + 1
}));
}
componentDidMount() {
this.interval = setInterval(() => this.tick(), 1000);
}
componentWillUnmount() {
clearInterval(this.interval);
}
render() {
return (
<div>Seconds Elapsed: {this.state.secondsElapsed}</div>
);
}
}
ReactDOM.render(<Timer />, mountNode);
但是,当我尝试实现自己的简单 Counter 类时,它失败了,并且出现控制台错误,提示无法读取未定义的属性 setState。
class Counter extends React.Component {
constructor(props) {
super(props);
this.state = {count: 0};
}
increment(prevState) {
this.setState((prevState) => ({
count: prevState.count + 1
}));
}
render() {
return (
<div className="main">
<button onClick={this.increment}>{this.state.count}</button>
</div>
)
}
}
一些谷歌搜索表明我必须将它绑定到增量函数。但是为什么在我看到的第一个示例中不需要这样做?我将代码复制到 CodePen,它在 React 15.3.1 中运行良好,我在该示例中找不到任何类似于绑定的内容。只有在构造函数中添加绑定代码后,我的示例才开始工作。
class Counter extends React.Component {
constructor(props) {
super(props);
this.state = {count: 0};
// THIS ONE LINE FIXED THE ISSUE
this.increment = this.increment.bind(this);
}
increment(prevState) {
this.setState((prevState) => ({
count: prevState.count + 1
}));
}
render() {
return (
<div className="main">
<button onClick={this.increment}>{this.state.count}</button>
</div>
)
}
}