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 стања) и неконтролисани (са референцом). У контролисаном режиму, вредност поља се чува у стању компоненте и ажурира се преко callback-а onChangeText. Овај приступ се препоручује за већину апликација, јер обезбеђује јединствени извор истине и поједностављује валидацију.

Према React Native Handling Text Input, 2024, TextInput се аутоматски прилагођава платформи: на iOS-у се користи изворни UITextField, на Android-у — EditText. Ово обезбеђује исправан рад аутоматске замене, аутоматске корекције и системских менија (исеци/копирај/налепи) без додатног подешавања.

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

TextInput пружа опсежан скуп својстава за управљање уносом, изгледом и понашањем. Сва својства су подељена у неколико категорија: управљање вредношћу, тип тастатуре, стилизовање, догађаји и платформске карактеристике.

Својства за управљање вредношћу

value — тренутна вредност поља (за контролисани режим). onChangeText — callback који се позива при свакој промени текста. placeholder — текст-савет који се приказује када је поље празно. defaultValue — почетна вредност за неконтролисани режим. maxLength ограничава максималан број карактера које корисник може да унесе.

Догађаји TextInput-а

Компонента подржава onFocus (поље је добило фокус), onBlur (поље је изгубило фокус), onSubmitEditing (корисник је притиснуо Enter/Return), onKeyPress (притисак на тастер). Догађај onEndEditing се позива након завршетка уређивања при губитку фокуса. Ови callback-ови омогућавају имплементацију сложене логике валидације и слања формулара.

Платформска својства

На 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 има тип тастатуре email-address и искључену аутоматску капитализацију. Лозинка користи secureTextEntry за скривање унетих карактера и ограничена је на 32 карактера преко maxLength.

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

Неконтролисани режим је погодан за једноставна поља где није потребна валидација или тренутна реакција на унос. Вредност поља се добија преко референце у тренутку слања формулара.

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Нумеричка тастатура (само цифре)Године, количина, ПИН код
email-addressТастатура са @ и .comПоље email у формулару за регистрацију
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. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође