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

77 lines
2.9 KiB
Markdown
Raw Normal View History

2018-10-12 20:00:59 +00:00
---
title: Component State
localeTitle: Состояние компонента
---
## Состояние компонента
2019-05-08 08:09:11 +00:00
В компонентах `Class` существует встроенный в React Native способ хранения и управления состоянием.
2018-10-12 20:00:59 +00:00
```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>
);
}
}
```
2019-05-08 08:09:11 +00:00
Состояние похоже на props, но оно является приватным и полностью контролируется компонентом. Метод `constructor()` вызывает конструктор родительского класса с `super();` - **`Component`** приходится родительским классу `App` потому что мы используем ключевое слово `extends` . Метод `constructor()` также инициализирует объект состояния компонента:
2018-10-12 20:00:59 +00:00
```
this.state = {
counter: 0
};
```
Состояние может отображаться внутри компонента:
```js
{this.state.counter}
```
2019-05-08 08:09:11 +00:00
Или обновляться по вызову:
2018-10-12 20:00:59 +00:00
```js
this.setState({});
```
2019-05-08 08:09:11 +00:00
**Примечание.** Помимо первоначального создания в методе `constructor()` вашего компонента, вы никогда не должны напрямую изменять состояние компонента с помощью `this.state =` . Вы должны использовать `this.setState` как видно из приведенных выше функций `incrementCount` и `decrementCount` .
2018-10-12 20:00:59 +00:00
2019-05-08 08:09:11 +00:00
Счётчик увеличивается и уменьшается по вызову функции, переданной обработчику `onPress` точно так же, как если бы вы вызвали обработчик кликов из JavaScript в вебе.
2018-10-12 20:00:59 +00:00
2019-05-08 08:09:11 +00:00
_Кроме того: В первом примере `<Button>` - это настраиваемый компонент; это комбинация `<TouchableOpacity>` и `<Text>` из React Native API:_
2018-10-12 20:00:59 +00:00
```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>
);
};
2019-05-08 08:09:11 +00:00
```