freeCodeCamp/guide/chinese/react-native/state/index.md

76 lines
2.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
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>
);
};
```