这是一个带有注释代码的演示,可提供更多信息:http://codepen.io/PiotrBerebecki/pen/rrGWjm
1.第 3 行的状态是什么?看起来像一个全局变量,它使
感觉它之前是否有 var 或 const 。那是一个生命周期吗
函数/变量?
第 3 行中的state 只是 Counter 组件的一个属性。在 React 中使用 ES6 语法初始化状态的另一种方法如下:
constructor() {
super();
this.state = {
value: 0
}
}
React 文档:https://facebook.github.io/react/docs/reusable-components.html#es6-classes
[React ES6 类] API 与 React.createClass 类似,不同之处在于
获取初始状态。而不是提供单独的 getInitialState
方法,您在构造函数中设置自己的状态属性。
2。我必须从反应中导入组件吗?我记得我
在 v15 中不需要这样做。
你也可以通过以下方式导入 React 并定义一个类:
import React from 'react';
class Counter extends React.Component {
...
以下内容还允许您使用组件 API:
import React, { Component } from 'react';
class Counter extends Component {
...
3. prevState 来自哪里?
prevState 来自 setState api:https://facebook.github.io/react/docs/component-api.html#setstate
也可以传递带有签名的函数
功能(状态,道具)。当您需要时,这在某些情况下可能很有用
将查询先前值的原子更新排入队列
state+props 在设置任何值之前。例如,假设我们想要
在 state 中增加一个值:
this.setState(function(previousState, currentProps) {
return {
value: previousState.value + 1
};
});
您会经常看到开发人员通过以下方式更新状态。这不如上述方法可靠,因为状态可能会异步更新,我们不应该依赖它的值来计算下一个状态。
this.setState({
value: this.state.value + 1 // prone to bugs
});
来自我的 codepen 的完整代码:
class Counter extends React.Component {
// state = { value: 0 };
// you can also initialise state in React
// in the constructor:
constructor() {
super();
this.state = {
value: 0
}
}
increment = () => {
this.setState(prevState => ({
value: prevState.value + 1
}));
}
decrement = () => {
this.setState(prevState => ({
value: prevState.value - 1
}));
}
render() {
return (
<div>
{this.state.value}
<button onClick={this.increment}>+</button>
<button onClick={this.decrement}>-</button>
</div>
)
}
}
ReactDOM.render(
<Counter />,
document.getElementById('app')
);