react.js中的生命周期事件状态和prevState
lifecycle event state and prevState in react.js
下面是react中的一个简单计数器。但我有三个问题。
-
第三行state是什么?它看起来像一个全局变量,如果前面有
var
或const
就有意义。这是生命周期函数/var吗? -
我必须从react中导入组件吗?我记得在v15中我不需要这样做。
-
prestate从何而来?
import React, { Component } from 'react'; class Counter extends Component { 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> ) } }
下面是一个带有注释的代码的演示,为您提供更多信息:http://codepen.io/PiotrBerebecki/pen/rrGWjm
1。第三行中的state是什么?它看起来像一个全局变量判断它前面是否有var或const。这是生命周期吗?函数/var ?
第3行中的 state
只是Counter组件的一个属性。在React中使用ES6语法初始化状态的另一种方法如下:
constructor() {
super();
this.state = {
value: 0
}
}
React docs: https://facebook.github.io/react/docs/reusable-components.html#es6-classes
[React ES6类]API类似于React。createClass,除了getInitialState。而不是提供单独的getInitialState方法,您可以在构造函数中设置自己的state属性。
2。我必须从react中导入Component吗?我记得我
你也可以直接导入React,然后用下面的方式定义一个类:
import React from 'react';
class Counter extends React.Component {
...
下面的代码也允许你使用组件API:
import React, { Component } from 'react';
class Counter extends Component {
...
3。prevState从何而来?
prestate来自setState api: https://facebook.github.io/react/docs/component-api.html#setstate
也可以传递带有签名的函数函数(状态、道具)。当您需要时,这在某些情况下是有用的的上一个值加入原子更新队列在设置任何值之前State +props。例如,假设我们想要在状态
中增加一个值
this.setState(function(previousState, currentProps) {
return {
value: previousState.value + 1
};
});
您将经常看到开发人员以以下方式更新状态。这比上面的方法更不可靠,因为状态可能是异步更新的,我们不应该依赖它的值来计算下一个状态。
this.setState({
value: this.state.value + 1 // prone to bugs
});
来自my 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')
);
你的代码中有一些与ES6 (ES2015)版本相关的功能,所以这就是为什么你可能会感到困惑:
第3行state是什么?它看起来像一个全局变量,如果它前面有var或const,这是有意义的。这是生命周期函数/var吗?
因为它在class
体中,所以它不是一个全局变量。在这种情况下,state
是一个属性,将被设置为Counter
的实例,因此您可以通过this.state
访问它。
我必须从react中导入Component吗?我记得在v15中我不需要这样做。
当使用类创建组件时,您需要扩展Component
类,所以在这种情况下:是的,您需要导入Component
,或者您也可以使用class Counter extends React.Component
。
prestate从何而来?
同样是ES6的特性。传递给this.setState()
方法的是一个函数。这可能令人困惑,因为这是一个箭头函数=>
。所以previousState
实际上是这个函数的一个参数。为了帮助您看清图片,上面的代码与类似:
this.setState(function (prevState) {
return {
value: prevState.value - 1
};
});
"普通"和箭头函数之间有一些区别,所以我建议你搜索一下ES6的功能,以便更熟悉它。
- 事件和状态
- WinJs中的视图状态更改事件在哪里
- 当用户处于空闲状态时,如何激发事件
- 火狐浏览器不会在前进时触发流行状态事件
- Highcharts点击事件返回“;悬停”;state而不是“state”;选择“;状态
- jquery在不触发更改事件的情况下切换设置状态
- React在状态更改时丢弃排队的事件
- 如何在浏览器页面切换到我的网站选项卡时创建事件,如gmail中的聊天框状态更改
- 悬停状态指针事件:无Javascript回退
- 在触摸结束事件期间,Find元素手指处于打开状态
- 如何在AngularJS$rootScope事件侦听器中应用状态转换
- 使用ReactJS使用Redux的简单状态更新事件
- 如何检查更改事件的复选框状态
- React.js-通过事件处理程序更改所有者组件的状态
- 使用$.data()更改click事件的状态时出现问题
- CRM 2013 - 事件解决 - 检索新的状态原因
- 如何在ajax调用后保留toggleClass事件状态
- react.js中的生命周期事件状态和prevState
- Typescript + jQuery:使用事件状态的正确方法
- 当浏览器退出“加载”时触发的事件;状态