Files
freeCodeCamp/guide/russian/react-native/state/index.md
2018-10-16 21:32:40 +05:30

76 lines
3.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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>
);
}
}
```
Состояние похоже на реквизит, но оно является частным и полностью контролируется компонентом. Здесь метод `constructor()` вызывает конструктор родительского класса с `super();` - **`Component`** является родительским классом `App` потому что мы используем ключевое слово `extends` . Метод `constructor()` также инициализирует объект состояния компонента:
```
this.state = {
counter: 0
};
```
Состояние может отображаться внутри компонента:
```js
{this.state.counter}
```
Или обновляется по телефону:
```js
this.setState({});
```
**Примечание.** Помимо своего первоначального создания в методе `constructor()` вашего компонента, вы никогда не должны напрямую изменять состояние компонента с помощью `this.state =` . Вы должны использовать `this.setState` как видно из приведенных выше функций `incrementCount` и `decrementCount` .
`onPress` увеличивается и уменьшается, вызывая функции, переданные обработчикам `onPress` точно так же, как если бы вы вызвали обработчик кликов из JavaScript в Интернете.
_ASIDE: В первом примере `<Button>` - это настраиваемый компонент; это комбинация `<TouchableOpacity>` и `<Text>` от React Native API:_
```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>
);
};
```