useState в мобильных приложениях

Хук useState — это основной способ управления локальным состоянием компонента в React и React Native. Он позволяет сохранять и обновлять данные, которые могут меняться во время взаимодействия пользователя с приложением: текст в поле ввода, состояние переключателя, видимость элемента и так далее.

Как работает useState

Функция useState принимает начальное значение и возвращает массив из двух элементов:

  • текущее значение состояния,
  • функцию для его обновления.

Пример базового использования:

import { useState } from 'react';
import { View, Text, Button } from 'react-native';

export default function CounterScreen() {
  const [count, setCount] = useState(0);

  return (
    <View>
      <Text>Счётчик: {count}</Text>
      <Button title="Увеличить" onPress={() => setCount(count + 1)} />
    </View>
  );
}

Типичные сценарии использования

Состояние формы

Поля ввода часто связаны с состоянием через useState. При каждом изменении текста состояние обновляется:

const [email, setEmail] = useState('');

// ...
<TextInput
  value={email}
  onChangeText={setEmail}
  placeholder="Введите email"
/>

Флаги загрузки и видимости

Для управления отображением модальных окон, индикаторов загрузки или ошибок удобно использовать булевы значения:

const [isLoading, setIsLoading] = useState(false);
const [isModalVisible, setIsModalVisible] = useState(false);

Списки данных

Если нужно отобразить динамический список (например, заметки или комментарии), его можно хранить в состоянии:

const [items, setItems] = useState<string[]>([]);

// Добавление элемента
const addItem = (text: string) => {
  setItems([...items, text]);
};

Важно помнить: при обновлении объектов или массивов в состоянии всегда создаётся новый экземпляр (например, с помощью оператора расширения ...), чтобы React мог корректно определить, что состояние изменилось.

Особенности в мобильной разработке

В React Native поведение useState ничем не отличается от веб-версии React. Однако интерфейсные элементы (вроде TextInput, Switch, Modal) требуют явной привязки к состоянию, так как они не поддерживают двустороннюю привязку «из коробки».

Например, для переключателя (Switch) нужно вручную обрабатывать событие изменения:

const [isEnabled, setIsEnabled] = useState(false);

// ...
<Switch
  value={isEnabled}
  onValueChange={setIsEnabled}
/>

Такой подход обеспечивает предсказуемость и контроль над данными в приложении.