TextInput¶
Основополагающий компонент для ввода текста в приложение с помощью клавиатуры. пропсы обеспечивают возможность настройки нескольких функций, таких как автокоррекция, автокапитализация, текст-заполнитель и различные типы клавиатуры, например цифровая клавиатура.
Самый простой вариант использования — поместить TextInput и подписаться на события onChangeText для чтения пользовательского ввода. Существуют и другие события, такие как onSubmitEditing и onFocus, на которые можно подписаться. Минимальный пример:
Два метода, открытые через родной элемент, это .focus() и .blur(), которые программно фокусируют или размывают TextInput.
Обратите внимание, что некоторые пропсы доступны только при multiline={true/false}. Кроме того, стили границ, которые применяются только к одной стороне элемента (например, borderBottomColor, borderLeftWidth и т.д.) не будут применяться, если multiline=true. Чтобы достичь того же эффекта, вы можете обернуть ваш TextInput в View:
По умолчанию TextInput имеет границу в нижней части своего представления. Эта граница имеет отступ, заданный фоновым изображением, предоставляемым системой, и его нельзя изменить. Чтобы избежать этого, можно либо не задавать высоту явно, в этом случае система позаботится об отображении границы в правильном положении, либо не отображать границу, установив underlineColorAndroid в прозрачный.
Обратите внимание, что на Android выделение текста во вводе может изменить параметр активности приложения windowSoftInputMode на adjustResize. Это может вызвать проблемы с компонентами, имеющими position: 'absolute' при активной клавиатуре. Чтобы избежать такого поведения, либо укажите windowSoftInputMode в AndroidManifest.xml, либо управляйте этим параметром программно с помощью нативного кода.
пропсы¶
View Props¶
Наследует View Props.
allowFontScaling¶
Определяет, должны ли шрифты масштабироваться с учетом настроек доступности Text Size. По умолчанию используется значение true.
| Type |
|---|
| bool |
autoCapitalize¶
Указывает TextInput автоматически набирать определенные символы заглавными буквами. Это свойство не поддерживается некоторыми типами клавиатур, такими как name-phone-pad.
characters: все символы.words: первая буква каждого слова.sentences: первая буква каждого предложения (по умолчанию).none: ничего автоматически не капитализировать.
| Type |
|---|
| enum('none', 'sentences', 'words', 'characters') |
autoComplete¶
Определяет подсказки автозаполнения для системы, чтобы она могла обеспечить автозаполнение. На Android система всегда будет пытаться предложить автозаполнение, используя эвристику для определения типа содержимого. Чтобы отключить автозаполнение, установите autoComplete в off.
Следующие значения работают на разных платформах:
additional-nameaddress-line1address-line2cc-numbercountrycurrent-passwordemailfamily-namegiven-namehonorific-prefixhonorific-suffixnamenew-passwordoffone-time-codepostal-codestreet-addresstelusername
Следующие значения работают только на iOS:
nicknameorganizationorganization-titleurl
Следующие значения работают только на Android:
birthdate-daybirthdate-fullbirthdate-monthbirthdate-yearcc-csccc-expcc-exp-daycc-exp-monthcc-exp-yeargendername-familyname-givenname-middlename-middle-initialname-prefixname-suffixpasswordpassword-newpostal-addresspostal-address-countrypostal-address-extendedpostal-address-extended-postal-codepostal-address-localitypostal-address-regionsms-otptel-country-codetel-nationaltel-deviceusername-new
| Type |
|---|
| enum('additional-name', 'address-line1', 'address-line2', 'birthdate-day', 'birthdate-full', 'birthdate-month', 'birthdate-year', 'cc-csc', 'cc-exp', 'cc-exp-day', 'cc-exp-month', 'cc-exp-year', 'cc-number', 'country', 'current-password', 'email', 'family-name', 'gender', 'given-name', 'honorific-prefix', 'honorific-suffix', 'name', 'name-family', 'name-given', 'name-middle', 'name-middle-initial', 'name-prefix', 'name-suffix', 'new-password', 'nickname', 'one-time-code', 'organization', 'organization-title', 'password', 'password-new', 'postal-address', 'postal-address-country', 'postal-address-extended', 'postal-address-extended-postal-code', 'postal-address-locality', 'postal-address-region', 'postal-code', 'street-address', 'sms-otp', 'tel', 'tel-country-code', 'tel-national', 'tel-device', 'url', 'username', 'username-new', 'off') |
autoCorrect¶
Если false, отключает автокоррекцию. По умолчанию используется значение true.
| Type |
|---|
| bool |
autoFocus¶
Если true, фокусирует ввод на componentDidMount или useEffect. Значение по умолчанию — false.
| Type |
|---|
| bool |
blurOnSubmit¶
Если true, текстовое поле будет размываться при отправке. Значение по умолчанию равно true для однострочных полей и false для многострочных. Обратите внимание, что для многострочных полей установка blurOnSubmit в true означает, что нажатие клавиши return размывает поле и вызывает событие onSubmitEditing вместо вставки новой строки в поле.
| Type |
|---|
| bool |
caretHidden¶
Если true, каретка будет скрыта. Значение по умолчанию — false.
| Type |
|---|
| bool |
clearButtonMode ¶
Когда кнопка очистки должна появиться в правой части текстового представления. Это свойство поддерживается только для однострочного компонента TextInput. Значение по умолчанию — никогда.
| Type |
|---|
| enum('never', 'while-editing', 'unless-editing', 'always') |
clearTextOnFocus ¶
Если true, то текстовое поле автоматически очищается, когда начинается редактирование.
| Type |
|---|
| bool |
contextMenuHidden¶
Если true, контекстное меню будет скрыто. Значение по умолчанию — false.
| Type |
|---|
| bool |
dataDetectorTypes ¶
Определяет типы данных, преобразуемых в кликабельные URL в текстовом вводе. Действует, только если multiline={true} и editable={false}. По умолчанию никакие типы данных не определяются.
Вы можете предоставить один тип или массив из множества типов.
Возможными значениями для dataDetectorTypes являются:
'phoneNumber''link''address''calendarEvent''none''all'
| Type |
|---|
| enum('phoneNumber', 'link', 'address', 'calendarEvent', 'none', 'all'), ,array of enum('phoneNumber', 'link', 'address', 'calendarEvent', 'none', 'all') |
defaultValue¶
Предоставляет начальное значение, которое будет меняться, когда пользователь начнет вводить текст. Полезно для тех случаев, когда вы не хотите заниматься прослушиванием событий и обновлением значения prop для синхронизации управляемого состояния.
| Type |
|---|
| string |
cursorColor ¶
При указании этого параметра устанавливается цвет курсора (или "каретки") в компоненте. В отличие от поведения selectionColor, цвет курсора будет установлен независимо от цвета поля выбора текста.
| Type |
|---|
| color |
disableFullscreenUI ¶
При false, если вокруг текстового ввода имеется небольшое пространство (например, при альбомной ориентации телефона), ОС может выбрать режим редактирования текста внутри полноэкранного текстового ввода. Когда true, эта функция отключена, и пользователи всегда будут редактировать текст непосредственно внутри текстового ввода. По умолчанию установлено значение false.
| Type |
|---|
| bool |
editable¶
Если false, текст не редактируется. По умолчанию используется значение true.
| Type |
|---|
| bool |
enablesReturnKeyAutomatically ¶
Если true, клавиатура отключает клавишу возврата при отсутствии текста и автоматически включает ее при появлении текста. Значение по умолчанию — false.
| Type |
|---|
| bool |
enterKeyHint¶
Определяет, какой текст должен быть показан для возвращаемого ключа. Имеет приоритет перед пропсом returnKeyType.
Следующие значения работают на разных платформах:
enterdonenextsearchsend
Только для Android
Следующие значения работают только на Android:
previous
| Type |
|---|
| enum('enter', 'done', 'next', 'previous', 'search', 'send') |
importantForAutofill ¶
Указывает операционной системе, следует ли включать отдельные поля вашего приложения в структуру представления для целей автозаполнения на Android API Level 26+. Возможные значения: auto, no, noExcludeDescendants, yes и yesExcludeDescendants. По умолчанию используется значение auto.
auto: Позволяет системе Android использовать свою эвристику, чтобы определить, важно ли представление для автозаполнения.no: Это представление не важно для автозаполнения.noExcludeDescendants: Это представление и его дочерние элементы не важны для автозаполнения.yes: Это представление важно для автозаполнения.yesExcludeDescendants: Это представление важно для автозаполнения, но его дочерние элементы не важны для автозаполнения.
| Type |
|---|
| enum('auto', 'no', 'noExcludeDescendants', 'yes', 'yesExcludeDescendants') |
inlineImageLeft ¶
Если определено, то предоставленный ресурс изображения будет отображаться слева. Ресурс изображения должен находиться внутри /android/app/src/main/res/drawable и ссылаться как
1 | |
| Type |
|---|
| string |
inlineImagePadding ¶
Расстояние между встроенным изображением, если оно есть, и самим вводимым текстом.
| Type |
|---|
| number |
inputAccessoryViewID ¶
Необязательный идентификатор, который связывает пользовательский InputAccessoryView с этим текстовым вводом. InputAccessoryView отображается над клавиатурой, когда этот текстовый ввод сфокусирован.
| Type |
|---|
| string |
inputMode¶
Работает как атрибут inputmode в HTML, определяет, какую клавиатуру открыть, например numeric, и имеет приоритет перед keyboardType.
Поддерживает следующие значения:
nonetextdecimalnumerictelsearchemailurl
| Type |
|---|
| enum('decimal', 'email', 'none', 'numeric', 'search', 'tel', 'text', 'url') |
keyboardAppearance ¶
Определяет цвет клавиатуры.
| Type |
|---|
| enum('default', 'light', 'dark') |
keyboardType¶
Определяет, какую клавиатуру открывать, например, numeric.
Смотрите скриншоты всех типов здесь.
Следующие значения работают на разных платформах:
defaultnumber-paddecimal-padnumericemail-addressphone-padurl
Только для iOS
Следующие значения работают только на iOS:
ascii-capablenumbers-and-punctuationname-phone-padtwitterweb-search
Только для Android
Следующие значения работают только на Android:
visible-password
| Type |
|---|
| enum('default', 'email-address', 'numeric', 'phone-pad', 'ascii-capable', 'numbers-and-punctuation', 'url', 'number-pad', 'name-phone-pad', 'decimal-pad', 'twitter', 'web-search', 'visible-password') |
maxFontSizeMultiplier¶
Указывает наибольший возможный масштаб, которого может достичь шрифт, если включено allowFontScaling. Возможные значения:
| Type |
|---|
| number |
maxLength¶
Ограничивает максимальное количество символов, которые можно ввести. Используйте это вместо реализации логики в JS, чтобы избежать мерцания.
| Type |
|---|
| number |
multiline¶
Если true, текстовый ввод может состоять из нескольких строк. Значение по умолчанию — false.
Важно отметить, что это выравнивает текст по верху на iOS, и центрирует его на Android. Используйте с textAlignVertical, установленным на top, для одинакового поведения на обеих платформах.
| Type |
|---|
| bool |
numberOfLines ¶
Устанавливает количество строк для TextInput. Используйте его с параметром multiline, установленным в true, чтобы иметь возможность заполнять строки.
| Type |
|---|
| number |
onBlur¶
Обратный вызов, который вызывается при размытии вводимого текста.
Примечание: Если вы пытаетесь получить доступ к значению text из nativeEvent, имейте в виду, что полученное значение может быть undefined, что может привести к непреднамеренным ошибкам. Если вы пытаетесь найти последнее значение TextInput, вы можете использовать событие onEndEditing, которое срабатывает по завершении редактирования.
| Type |
|---|
| function |
onChange¶
Обратный вызов, который вызывается при изменении текста текстового ввода.
| Type |
|---|
({nativeEvent: {eventCount, target, text}}) => void |
onChangeText¶
Обратный вызов, который вызывается при изменении текста текстового ввода. Измененный текст передается как единственный строковый аргумент обработчику обратного вызова.
| Type |
|---|
| function |
onContentSizeChange¶
Обратный вызов, который вызывается при изменении размера содержимого текстового ввода.
Вызывается только для многострочных текстовых вводов.
| Type |
|---|
({nativeEvent: {contentSize: {width, height} }}) => void |
onEndEditing¶
Обратный вызов, который вызывается по окончании ввода текста.
| Type |
|---|
| function |
onPressIn¶
Обратный вызов, который вызывается при задействовании касания.
| Type |
|---|
| ({nativeEvent: PressEvent}) => void |
onPressOut¶
Обратный вызов, который вызывается, когда прикосновение отпускается.
| Type |
|---|
| ({nativeEvent: PressEvent}) => void |
onFocus¶
Обратный вызов, который вызывается, когда текстовый ввод сфокусирован.
| Type |
|---|
| ({nativeEvent: LayoutEvent}) => void |
onKeyPress¶
Обратный вызов, который вызывается при нажатии клавиши. Он будет вызван объектом, где keyValue равно 'Enter' или 'Backspace' для соответствующих клавиш и вводимому символу в противном случае, включая '' для пробела. Вызывается перед обратным вызовом onChange. Примечание: на Android обрабатываются только вводы с мягкой клавиатуры, а не с аппаратной.
| Type |
|---|
({nativeEvent: {key: keyValue} }) => void |
onLayout¶
Вызывается при монтировании и при смене раскладки.
| Type |
|---|
| ({nativeEvent: LayoutEvent}) => void |
onScroll¶
Вызывается при прокрутке содержимого. Может также содержать другие свойства из ScrollEvent, но в Android contentSize не предоставляется по причинам производительности.
| Type |
|---|
({nativeEvent: {contentOffset: {x, y} }}) => void |
onSelectionChange¶
Обратный вызов, который вызывается при изменении выбора ввода текста.
| Type |
|---|
({nativeEvent: {selection: {start, end} }}) => void |
onSubmitEditing¶
Обратный вызов, который вызывается при нажатии кнопки отправки текстового ввода.
| Type |
|---|
({nativeEvent: {text, eventCount, target}}) => void |
Обратите внимание, что на iOS этот метод не вызывается при использовании keyboardType="phone-pad".
placeholder¶
Строка, которая будет выведена перед вводом текста.
| Type |
|---|
| string |
placeholderTextColor¶
Цвет текста строки-заполнителя.
| Type |
|---|
| color |
readOnly¶
Если true, текст не редактируется. Значение по умолчанию — false.
| Type |
|---|
| bool |
returnKeyLabel ¶
Устанавливает ключ возврата для метки. Используйте его вместо returnKeyType.
| Type |
|---|
| string |
returnKeyType¶
Определяет, как должен выглядеть ключ возврата. В Android вы также можете использовать returnKeyLabel.
Кросс-платформа
Следующие значения работают на разных платформах:
donegonextsearchsend
Только для Android
Следующие значения работают только на Android:
noneprevious
Только для iOS
Следующие значения работают только на iOS:
defaultemergency-callgooglejoinrouteyahoo
| Type |
|---|
| enum('done', 'go', 'next', 'search', 'send', 'none', 'previous', 'default', 'emergency-call', 'google', 'join', 'route', 'yahoo') |
rejectResponderTermination ¶
Если true, позволяет TextInput передавать события касания родительскому компоненту. Это позволяет таким компонентам, как SwipeableListView, быть пролистываемыми из TextInput на iOS, как это происходит по умолчанию на Android. Если false, TextInput всегда просит обработать ввод (кроме случаев, когда он отключен). Значение по умолчанию — true.
| Type |
|---|
| bool |
rows ¶
Устанавливает количество строк для TextInput. Используйте его с параметром multiline, установленным в true, чтобы иметь возможность заполнять строки.
| Type |
|---|
| number |
scrollEnabled ¶
| Type |
|---|
| bool |
secureTextEntry¶
Если true, текстовый ввод скрывает вводимый текст, что позволяет сохранить конфиденциальный текст, например, пароли. Значение по умолчанию — false. Не работает с multiline={true}.
| Type |
|---|
| bool |
selection¶
Начало и конец выделения вводимого текста. Установите начало и конец в одно и то же значение для позиционирования курсора.
| Type |
|---|
| object: |
selectionColor¶
Цвет выделения и курсора при вводе текста.
| Type |
|---|
| color |
selectTextOnFocus¶
Если true, весь текст будет автоматически выделяться при фокусировке.
| Type |
|---|
| bool |
showSoftInputOnFocus¶
Если значение false, оно предотвращает отображение мягкой клавиатуры, когда поле сфокусировано. Значение по умолчанию — true.
| Type |
|---|
| bool |
spellCheck ¶
Если false, отключает стиль проверки орфографии (т.е. красные подчеркивания). Значение по умолчанию наследуется от autoCorrect.
| Type |
|---|
| bool |
textAlign¶
Выравнивание вводимого текста по левой, центральной или правой стороне поля ввода.
Возможными значениями для textAlign являются:
leftcenterright
| Type |
|---|
| enum('left', 'center', 'right') |
textContentType ¶
Предоставить клавиатуре и системе информацию об ожидаемом семантическом значении контента, который вводят пользователи.
autoComplete, обеспечивает ту же функциональность и доступен для всех платформ. Вы можете использовать Platform.select для различных вариантов поведения платформы.
Избегайте использования одновременно textContentType и autoComplete. Для обратной совместимости, textContentType имеет приоритет, когда оба свойства установлены.
Для iOS 11+ вы можете установить textContentType в username или password, чтобы включить автозаполнение регистрационных данных из связки ключей устройства.
Для iOS 12+ newPassword может использоваться для указания ввода нового пароля, который пользователь может захотеть сохранить в связке ключей, а oneTimeCode может использоваться для указания того, что поле может быть автоматически заполнено кодом, пришедшим в SMS.
Чтобы отключить автозаполнение, установите textContentType в none.
Возможными значениями для textContentType являются:
noneURLaddressCityaddressCityAndStateaddressStatecountryNamecreditCardNumberemailAddressfamilyNamefullStreetAddressgivenNamejobTitlelocationmiddleNamenamenamePrefixnameSuffixnicknameorganizationNamepostalCodestreetAddressLine1streetAddressLine2sublocalitytelephoneNumberusernamepasswordnewPasswordoneTimeCode
| Type |
|---|
| enum('none', 'URL', 'addressCity', 'addressCityAndState', 'addressState', 'countryName', 'creditCardNumber', 'emailAddress', 'familyName', 'fullStreetAddress', 'givenName', 'jobTitle', 'location', 'middleName', 'name', 'namePrefix', 'nameSuffix', 'nickname', 'organizationName', 'postalCode', 'streetAddressLine1', 'streetAddressLine2', 'sublocality', 'telephoneNumber', 'username', 'password') |
passwordRules ¶
При использовании textContentType в качестве newPassword на iOS мы можем сообщить ОС минимальные требования к паролю, чтобы она могла сгенерировать тот, который будет им соответствовать. Чтобы создать допустимую строку для PasswordRules, загляните в Apple Docs.
Если диалог генерации паролей не появляется, убедитесь, что:
- Автозаполнение включено: Настройки → Пароли и учетные записи → установите флажок "Вкл" на Автозаполнение паролей,
- Используется связка ключей iCloud: Настройки → Apple ID → iCloud → Keychain → переключить "Вкл" iCloud Keychain.
| Type |
|---|
| string |
style¶
Обратите внимание, что поддерживаются не все стили текста, неполный список того, что не поддерживается, включает:
borderLeftWidthborderTopWidthborderRightWidthborderBottomWidthborderTopLeftRadiusborderTopRightRadiusborderBottomRightRadiusborderBottomLeftRadius
более подробно см. в Issue#7070.
| Type |
|---|
| Text |
textBreakStrategy ¶
Установка стратегии разбиения текста на Android API Level 23+, возможные значения simple, highQuality, balanced Значение по умолчанию simple.
| Type |
|---|
| enum('simple', 'highQuality', 'balanced') |
underlineColorAndroid ¶
Цвет подчеркивания TextInput.
| Type |
|---|
| color |
value¶
Значение, которое будет отображаться для ввода текста. TextInput является контролируемым компонентом, что означает, что собственное значение будет принудительно соответствовать этому значению prop, если оно предоставлено. Для большинства случаев это работает отлично, но в некоторых случаях это может вызвать мерцание — одной из распространенных причин является предотвращение редактирования путем сохранения одинакового значения. В дополнение к установке одинакового значения, либо установите editable={false}, либо установите/обновите maxLength, чтобы предотвратить нежелательное редактирование без мерцания.
| Type |
|---|
| string |
lineBreakStrategyIOS ¶
Установка стратегии перевода строки на iOS 14+. Возможные значения: none, standard, hangul-word и push-out.
| Type | Default |
|---|---|
enum('none', 'standard', 'hangul-word', 'push-out') | 'none' |
Методы¶
.focus()¶
1 | |
Делает запрос на ввод исходного текста фокусным.
.blur()¶
1 | |
Заставляет пользовательский ввод потерять фокус.
clear()¶
1 | |
Удаляет весь текст из TextInput.
isFocused()¶
1 | |
Возвращает true, если вход в данный момент сфокусирован; false в противном случае.
Известные проблемы¶
- react-native#19096: Не поддерживает
onKeyPreImeв Android. - react-native#19366: Вызов
.focus()после закрытия клавиатуры Android с помощью кнопки "Назад" не вызывает клавиатуру снова. - react-native#26799: Не поддерживается
secureTextEntryв Android, когдаkeyboardType="email-addressилиkeyboardType="phone-pad".