TextInput — какво е, въвеждане на текст и React Native

Автор: IT Sectr Публикувано: 2026-07-05 Време за четене: 9 мин

Компонентът TextInput в React Native — основният елемент за въвеждане на текст от потребителя, аналог на HTML елемента input. TextInput поддържа контролирано и неконтролирано състояние, различни типове клавиатура, маски за въвеждане и обработка на събития за фокус. Според React Native Docs, 2024, TextInput е ключов компонент за формуляри, търсене, чатове и всякакви сценарии с потребителско въвеждане. Компонентът автоматично се адаптира към платформата, използвайки естествения UITextField на iOS и EditText на Android.

Основни точки

  • TextInput — React Native компонент за въвеждане на текст, аналог на HTML input
  • Поддържа контролирано състояние чрез value + onChangeText
  • Предоставя типове клавиатура: default, numeric, email, phone, url
  • Рендерира се като UITextField на iOS и EditText на Android
  • Поддържа многоредово въвеждане, placeholder и secureTextEntry за пароли

Какво е TextInput в React Native

TextInput е React Native компонент, който позволява на потребителя да въвежда текст от клавиатурата на устройството. Той е основният градивен елемент за регистрационни формуляри, ленти за търсене, полета за въвеждане на съобщения и всякакви други сценарии, изискващи потребителско въвеждане. За разлика от уеб разработката, където съществуват отделни типове input (text, email, password, search), в React Native всички тези варианти се реализират чрез един компонент TextInput с различни свойства.

TextInput поддържа два режима на работа: контролиран (управляван чрез React състояние) и неконтролиран (с ref). В контролиран режим стойността на полето се съхранява в състоянието на компонента и се актуализира чрез обратното извикване onChangeText. Този подход се препоръчва за повечето приложения, тъй като осигурява единствен източник на истина и опростява валидацията.

Според React Native Handling Text Input, 2024, TextInput автоматично се адаптира към платформата: на iOS се използва естественият UITextField, на Android — EditText. Това осигурява правилната работа на автоматичната смяна, автоматичната корекция и системните менюта (изрязване/копиране/поставяне) без допълнителна конфигурация.

Свойства и API на компонента TextInput

TextInput предоставя обширен набор от свойства за управление на въвеждането, външния вид и поведението. Всички свойства са разделени на няколко категории: управление на стойността, тип клавиатура, стилизиране, събития и платформени характеристики.

Свойства за управление на стойността

value — текущата стойност на полето (за контролиран режим). onChangeText — обратно извикване, извиквано при всяка промяна на текста. placeholder — подсказващ текст, показван когато полето е празно. defaultValue — начална стойност за неконтролиран режим. maxLength ограничава максималния брой символи, които потребителят може да въведе.

Събития на TextInput

Компонентът поддържа onFocus (полето получи фокус), onBlur (полето загуби фокус), onSubmitEditing (потребителят натисна Enter/Return), onKeyPress (натискане на клавиш). Събитието onEndEditing се извиква след завършване на редактирането при загуба на фокус. Тези обратни извиквания позволяват реализиране на сложна логика за валидация и изпращане на формуляри.

Платформени свойства

На iOS са налични: clearButtonMode (бутон за изчистване), keyboardAppearance (светла/тъмна клавиатура), returnKeyType (тип на бутона Return), enablesReturnKeyAutomatically. На Android са налични: textContentType (автоматично попълване), underlineColorAndroid, inlineImageLeft. secureTextEntry работи на двете платформи за въвеждане на пароли.

Контролирано и неконтролирано въвеждане

В React Native, TextInput може да работи в два режима. В контролиран режим, React управлява стойността на полето: вие предавате value от състоянието и го актуализирате чрез onChangeText. В неконтролиран режим, React само инициализира полето, а стойността, подобна на DOM, се съхранява вътре в естествения компонент.

Контролиран TextInput

Контролираният режим се препоръчва за всички формуляри, където е необходима валидация, филтриране или форматиране на въведените данни. Състоянието на полето е синхронизирано със състоянието на React компонента, което дава пълен контрол над стойността.

js
const LoginForm = () => {
    const [email, setEmail] = useState('');
    const [password, setPassword] = useState('');

    return (
        <View>
            <TextInput
                placeholder="Email"
                value={email}
                onChangeText={setEmail}
                keyboardType="email-address"
                autoCapitalize="none"
            />
            <TextInput
                placeholder="Password"
                value={password}
                onChangeText={setPassword}
                secureTextEntry
                maxLength={32}
            />
        </View>
    );
};

В този пример и двете полета използват контролиран режим. Имейлът има тип клавиатура email-address и автоматичното изписване с главни букви е изключено. Паролата използва secureTextEntry за скриване на въведените символи и е ограничена до 32 символа чрез maxLength.

Неконтролиран TextInput

Неконтролираният режим е подходящ за прости полета, където не е необходима валидация или незабавна реакция на въвеждане. Стойността на полето се извлича чрез ref в момента на изпращане на формуляра.

js
const SimpleSearch = () => {
    const inputRef = useRef(null);

    const handleSearch = () => {
        console.log(inputRef.current.value());
    };

    return (
        <TextInput
            ref={inputRef}
            placeholder="Search..."
            onSubmitEditing={handleSearch}
        />
    );
};

В неконтролиран режим компонентът се рендерира по-бързо, тъй като не изисква синхронизация на състоянието при всяка промяна на текста. Въпреки това, губите възможността да филтрирате, форматирате или валидирате въвеждането в реално време.

Типове клавиатура и платформени характеристики

TextInput поддържа различни типове клавиатура, които адаптират оформлението към очаквания формат на въвеждане. Изборът на правилния тип клавиатура подобрява потребителското изживяване и намалява броя на грешките при въвеждане на мобилни устройства.

Стойност на keyboardTypeОписаниеКога да се използва
defaultСтандартна азбучна клавиатураИме, фамилия, адрес
numericЦифрова клавиатура (само цифри)Възраст, количество, PIN код
email-addressКлавиатура с @ и .comПоле за имейл в регистрационен формуляр
phone-padТелефонна клавиатура с + и #Телефонен номер
urlКлавиатура с / и .comВъвеждане на уеб адрес
decimal-padЦифрова клавиатура с десетична точкаЦена, тегло, размер

На iOS са налични допълнителни типове: numbers-and-punctuation (цифри и пунктуация), twitter, web-search (с гласово търсене). На Android също е наличен visible-password (показва паролата). Правилният избор на keyboardType е важен аспект на UX на мобилното приложение.

Платформените характеристики включват също autoCapitalize (автоматично изписване с главна буква на първата дума), autoCorrect (автоматична корекция), spellCheck (проверка на правописа), textContentType (автоматично попълване на iOS). Тези свойства работят различно на всяка платформа и изискват тестване.

Практически примери с TextInput

Нека разгледаме два реални сценария: многоредово поле за въвеждане на съобщение и поле с маскирано въвеждане на телефонен номер. И двата използват TextInput с различни свойства за постигане на желаното поведение.

Пример 1: многоредово поле за съобщение

За въвеждане на дълъг текст (коментари, описание) TextInput превключва в многоредов режим чрез свойството multiline. В този режим полето расте вертикално и поддържа прекъсване на редове.

js
const MessageInput = ({ onSend }) => {
    const [text, setText] = useState('');

    return (
        <TextInput
            style={styles.input}
            multiline
            numberOfLines={4}
            placeholder="Write a message..."
            value={text}
            onChangeText={setText}
            textAlignVertical="top"
        />
    );
};

Свойството multiline включва многоредов режим, numberOfLines задава началната височина в редове. textAlignVertical: 'top' подравнява текста към горния ръб (по подразбиране на Android многоредовият TextInput центрира текста вертикално).

Пример 2: поле с форматиране на телефонен номер

За въвеждане на телефонен номер често се изисква форматиране в реално време. Чрез комбиниране на onChangeText с регулярни изрази може да се реализира маска за въвеждане.

js
const PhoneInput = () => {
    const [phone, setPhone] = useState('');

    const formatPhone = (text) => {
        const cleaned = text.replace(/\D/g, '');
        if (cleaned.length <= 11) {
            return cleaned.replace(
                /(\d{1})(\d{3})(\d{3})(\d{2})(\d{2})/,
                '+$1 ($2) $3 $4 $5'
            );
        }
        return cleaned;
    };

    return (
        <TextInput
            keyboardType="phone-pad"
            value={phone}
            onChangeText={(t) => setPhone(formatPhone(t))}
            placeholder="+7 (999) 123 45 67"
            maxLength={20}
        />
    );
};

Функцията formatPhone премахва всички нецифрови символи и форматира номера в стандартен международен формат. keyboardType: 'phone-pad' показва телефонната клавиатура. Такъв подход подобрява UX за въвеждане на телефонни номера и предотвратява грешки при форматиране.

Често задавани въпроси

Каква е разликата между value и defaultValue в TextInput?

value се използва в контролиран режим — React управлява показвания текст чрез състояние. defaultValue се използва в неконтролиран режим — задава начална стойност, а по-нататъшните промени се съхраняват вътре в компонента.

Как да скрия въведения текст за парола?

Задайте свойството secureTextEntry на true. TextInput ще скрие въведените символи, заменяйки ги с точки или звездички. За допълнителна сигурност можете да комбинирате с maxLength и autoCapitalize: 'none'.

Защо onChangeText се извиква при всяко натискане?

onChangeText се извиква при всяка промяна на текста, включително вмъкване и изтриване на един символ. Това е нормално поведение на контролиран компонент. За оптимизация можете да използвате debounce или да актуализирате състоянието при onEndEditing.

Как да направя TextInput с икона вътре?

TextInput не поддържа директно вложени елементи. Решението — създайте контейнер View с Flexbox, вътре в който поставете иконата и TextInput. Стилът на контейнера имитира границата на полето за въвеждане, а TextInput се разтяга в оставащото пространство.

Как да премахна подчертаването на TextInput на Android?

На Android TextInput по подразбиране има долна граница (Material Design). Изключете я чрез underlineColorAndroid: 'transparent'. Това свойство работи само на Android и премахва визуалната линия под текста.

Резюме

  • TextInput — основният React Native компонент за въвеждане на текст, аналог на HTML input с разширени възможности
  • Поддържа контролиран (value + onChangeText) и неконтролиран режим на работа
  • Предоставя типове клавиатура (default, numeric, email, phone, url) и secureTextEntry за пароли
  • Многоредов режим чрез multiline с numberOfLines и textAlignVertical
  • Ключови събития: onFocus, onBlur, onChangeText, onSubmitEditing, onEndEditing
  • Платформените свойства включват textContentType (iOS), underlineColorAndroid (Android)
  • За маски за въвеждане използвайте onChangeText с форматиране чрез регулярни изрази

Ще разработим мобилно приложение под ключ

IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.

Обсъдете проекта

Прочетете също