76 lines
2.0 KiB
Markdown
76 lines
2.0 KiB
Markdown
|
---
|
|||
|
title: Component State
|
|||
|
localeTitle: 组件状态
|
|||
|
---
|
|||
|
## 组件状态
|
|||
|
|
|||
|
在`Class`组件中,有一种方法可以存储和管理React Native内置的状态。
|
|||
|
|
|||
|
```javascript
|
|||
|
class App extends Component {
|
|||
|
constructor () {
|
|||
|
super();
|
|||
|
this.state = {
|
|||
|
counter: 0
|
|||
|
};
|
|||
|
}
|
|||
|
incrementCount () {
|
|||
|
this.setState({
|
|||
|
counter: this.state.counter + 1
|
|||
|
});
|
|||
|
}
|
|||
|
decrementCount () {
|
|||
|
this.setState({
|
|||
|
counter: this.state.counter - 1
|
|||
|
});
|
|||
|
}
|
|||
|
render () {
|
|||
|
return (
|
|||
|
<View>
|
|||
|
<Text>Count: {this.state.counter}</Text>
|
|||
|
<Button onPress={this.decrementCount.bind(this)}>-</Button>
|
|||
|
<Button onPress={this.incrementCount.bind(this)}>+</Button>
|
|||
|
</View>
|
|||
|
);
|
|||
|
}
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
State类似于props,但它是私有的并且完全由组件控制。这里, `constructor()`方法用`super();`调用父类的构造函数`super();` - **`Component`**是`App`的父类,因为我们使用的是`extends`关键字。 `constructor()`方法还初始化组件的状态对象:
|
|||
|
```
|
|||
|
this.state = {
|
|||
|
counter: 0
|
|||
|
};
|
|||
|
```
|
|||
|
|
|||
|
状态可以显示在组件中:
|
|||
|
|
|||
|
```js
|
|||
|
{this.state.counter}
|
|||
|
```
|
|||
|
|
|||
|
或通过致电更新:
|
|||
|
|
|||
|
```js
|
|||
|
this.setState({});
|
|||
|
```
|
|||
|
|
|||
|
**注意:**除了在组件的`constructor()`方法中初始创建之外,您不应该使用`this.state =`直接修改组件的状态。您必须使用`this.setState` ,可以在上面的`incrementCount`和`decrementCount`函数中看到。
|
|||
|
|
|||
|
通过调用传递给`onPress`处理程序的函数来增加和减少计数,就像在Web上调用JavaScript中的单击处理程序一样。
|
|||
|
|
|||
|
_ASIDE:在第一个例子中, `<Button>`是一个自定义组件;它是来自React Native API的`<TouchableOpacity>`和`<Text>`的组合:_
|
|||
|
|
|||
|
```js
|
|||
|
const Button = ({ onPress, children, buttonProps, textProps }) => {
|
|||
|
const { buttonStyle, textStyle } = styles;
|
|||
|
return (
|
|||
|
<TouchableOpacity onPress={onPress} style={[buttonStyle, buttonProps]}>
|
|||
|
<Text style={[textStyle, textProps]}>
|
|||
|
{children}
|
|||
|
</Text>
|
|||
|
</TouchableOpacity>
|
|||
|
);
|
|||
|
};
|
|||
|
|
|||
|
```
|