131 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			131 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| 
								 | 
							
								---
							 | 
						|||
| 
								 | 
							
								title: State
							 | 
						|||
| 
								 | 
							
								localeTitle: 州
							 | 
						|||
| 
								 | 
							
								---
							 | 
						|||
| 
								 | 
							
								# 州
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								State是数据来源的地方。
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								我们应该总是尽量使我们的状态尽可能简单,并尽量减少有状态组件的数量。例如,如果我们有10个需要来自州的数据的组件,我们应该创建一个容器组件来保持所有这些组件的状态。
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								State基本上就像一个组件中随处可用的全局对象。
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								有状态类组件的示例:
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								```javascript
							 | 
						|||
| 
								 | 
							
								import React from 'react'; 
							 | 
						|||
| 
								 | 
							
								 
							 | 
						|||
| 
								 | 
							
								 class App extends React.Component { 
							 | 
						|||
| 
								 | 
							
								  constructor(props) { 
							 | 
						|||
| 
								 | 
							
								    super(props); 
							 | 
						|||
| 
								 | 
							
								 
							 | 
						|||
| 
								 | 
							
								    // We declare the state as shown below 
							 | 
						|||
| 
								 | 
							
								 
							 | 
						|||
| 
								 | 
							
								    this.state = { 
							 | 
						|||
| 
								 | 
							
								      x: "This is x from state", 
							 | 
						|||
| 
								 | 
							
								      y: "This is y from state" 
							 | 
						|||
| 
								 | 
							
								    } 
							 | 
						|||
| 
								 | 
							
								  } 
							 | 
						|||
| 
								 | 
							
								  render() { 
							 | 
						|||
| 
								 | 
							
								    return ( 
							 | 
						|||
| 
								 | 
							
								      <div> 
							 | 
						|||
| 
								 | 
							
								        <h1>{this.state.x}</h1> 
							 | 
						|||
| 
								 | 
							
								        <h2>{this.state.y}</h2> 
							 | 
						|||
| 
								 | 
							
								      </div> 
							 | 
						|||
| 
								 | 
							
								    ); 
							 | 
						|||
| 
								 | 
							
								  } 
							 | 
						|||
| 
								 | 
							
								 } 
							 | 
						|||
| 
								 | 
							
								 export default App; 
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								另一个例子:
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								```javascript
							 | 
						|||
| 
								 | 
							
								import React from 'react'; 
							 | 
						|||
| 
								 | 
							
								 
							 | 
						|||
| 
								 | 
							
								 class App extends React.Component { 
							 | 
						|||
| 
								 | 
							
								  constructor(props) { 
							 | 
						|||
| 
								 | 
							
								    super(props); 
							 | 
						|||
| 
								 | 
							
								 
							 | 
						|||
| 
								 | 
							
								    // We declare the state as shown below 
							 | 
						|||
| 
								 | 
							
								    this.state = { 
							 | 
						|||
| 
								 | 
							
								      x: "This is x from state", 
							 | 
						|||
| 
								 | 
							
								      y: "This is y from state" 
							 | 
						|||
| 
								 | 
							
								    } 
							 | 
						|||
| 
								 | 
							
								  } 
							 | 
						|||
| 
								 | 
							
								 
							 | 
						|||
| 
								 | 
							
								  render() { 
							 | 
						|||
| 
								 | 
							
								    let x1 = this.state.x; 
							 | 
						|||
| 
								 | 
							
								    let y1 = this.state.y; 
							 | 
						|||
| 
								 | 
							
								 
							 | 
						|||
| 
								 | 
							
								    return ( 
							 | 
						|||
| 
								 | 
							
								      <div> 
							 | 
						|||
| 
								 | 
							
								        <h1>{x1}</h1> 
							 | 
						|||
| 
								 | 
							
								        <h2>{y1}</h2> 
							 | 
						|||
| 
								 | 
							
								      </div> 
							 | 
						|||
| 
								 | 
							
								    ); 
							 | 
						|||
| 
								 | 
							
								  } 
							 | 
						|||
| 
								 | 
							
								 } 
							 | 
						|||
| 
								 | 
							
								 export default App; 
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								## 更新国家
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								您可以使用组件上的`setState`方法更改存储在应用程序状态中的数据。
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								```js
							 | 
						|||
| 
								 | 
							
								this.setState({ value: 1 }); 
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								请记住, `setState`是异步的,因此在使用当前状态设置新状态时应该小心。一个很好的例子就是你想在你的州增加一个值。
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#### 错误的方法
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								```js
							 | 
						|||
| 
								 | 
							
								this.setState({ value: this.state.value + 1 }); 
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								如果在同一更新周期中多次调用上述代码,则可能会导致应用程序出现意外行为。为避免这种情况,您可以将更新程序回调函数传递给`setState`而不是对象。
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#### 正确的方式
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								```js
							 | 
						|||
| 
								 | 
							
								this.setState(prevState => ({ value: prevState.value + 1 })); 
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								## 更新国家
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								您可以使用组件上的`setState`方法更改存储在应用程序状态中的数据。
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								```js
							 | 
						|||
| 
								 | 
							
								this.setState({value: 1}); 
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								请记住, `setState`可能是异步的,因此在使用当前状态设置新状态时应该小心。一个很好的例子就是你想在你的州增加一个值。
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								##### 错误的方法
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								```js
							 | 
						|||
| 
								 | 
							
								this.setState({value: this.state.value + 1}); 
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								如果在同一更新周期中多次调用上述代码,则可能会导致应用程序出现意外行为。为避免这种情况,您可以将更新程序回调函数传递给`setState`而不是对象。
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								##### 正确的方式
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								```js
							 | 
						|||
| 
								 | 
							
								this.setState(prevState => ({value: prevState.value + 1})); 
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								##### 更清洁的方式
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								this.setState(({ value }) => ({ value: value + 1 })); 
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								当仅需要状态对象中的有限数量的字段时,可以将对象破坏用于更清洁的代码。
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								### 更多信息
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								*   [反应 - 状态和生命周期](https://reactjs.org/docs/state-and-lifecycle.html)
							 | 
						|||
| 
								 | 
							
								*   [反应 - 提升状态](https://reactjs.org/docs/lifting-state-up.html)
							 | 
						|||
| 
								 | 
							
								*   [React Native - State Up](https://facebook.github.io/react-native/docs/state.html)
							 |