Reference version

SecureField

A SwiftUI SecureField component for password input.

iOS
tvOS
Included in Expo Go
Bundled version:
~56.0.2

For the complete documentation index, see llms.txt. Use this file to discover all available pages.

Expo UI SecureField matches the official SwiftUI SecureField API and provides a text field that masks user input for passwords and other sensitive text.

Installation

Terminal
npx expo install @expo/ui

If you are installing this in an existing React Native app, make sure to install expo in your project.

Usage

Basic secure field

BasicSecureFieldExample.tsx
import { useState } from 'react'; import { Host, SecureField } from '@expo/ui/swift-ui'; export default function BasicSecureFieldExample() { const [password, setPassword] = useState(''); return ( <Host matchContents> <SecureField placeholder="Password" onValueChange={setPassword} /> </Host> ); }

Submit handling

Use the submitLabel and onSubmit modifiers to handle form submission from the keyboard.

SecureFieldSubmitExample.tsx
import { useState } from 'react'; import { Host, SecureField } from '@expo/ui/swift-ui'; import { submitLabel, onSubmit } from '@expo/ui/swift-ui/modifiers'; export default function SecureFieldSubmitExample() { const [password, setPassword] = useState(''); return ( <Host matchContents> <SecureField placeholder="Password" onValueChange={setPassword} modifiers={[submitLabel('done'), onSubmit(() => console.log('Login submitted'))]} /> </Host> ); }

Imperative ref

Use a ref to imperatively set text, focus, or blur the secure field.

ImperativeSecureFieldExample.tsx
import { useRef } from 'react'; import { Host, SecureField, SecureFieldRef, Button, HStack, VStack } from '@expo/ui/swift-ui'; import { buttonStyle } from '@expo/ui/swift-ui/modifiers'; export default function ImperativeSecureFieldExample() { const ref = useRef<SecureFieldRef>(null); return ( <Host matchContents> <VStack> <SecureField ref={ref} placeholder="Password" /> <HStack spacing={12}> <Button modifiers={[buttonStyle('bordered')]} onPress={() => ref.current?.focus()} label="Focus" /> <Button modifiers={[buttonStyle('bordered')]} onPress={() => ref.current?.blur()} label="Blur" /> <Button modifiers={[buttonStyle('bordered')]} onPress={() => ref.current?.setText('secret123')} label="Set Text" /> </HStack> </VStack> </Host> ); }

API

import { SecureField } from '@expo/ui/swift-ui';

Component

SecureField

iOS
tvOS

Type: React.Element<SecureFieldProps>

Renders a SwiftUI SecureField for password input.

SecureFieldProps

autoFocus

iOS
tvOS
Optional • Type: boolean • Default: false

If true, the secure field will be focused automatically when mounted.

children

iOS
tvOS
Optional • Type: React.ReactNode

Slot children - supports <SecureField.Placeholder> with a <Text> child

maxLength

iOS
tvOS
Optional • Type: number

Maximum number of characters allowed. Truncates natively as the user types.

onFocusChange

iOS
tvOS
Optional • Type: (focused: boolean) => void

A callback triggered when the field gains or loses focus.

onTextChange

iOS
tvOS
Optional • Type: (text: string) => void

A callback triggered when the text value changes.

If the callback is marked with the 'worklet' directive, it runs synchronously on the UI thread; otherwise it is delivered asynchronously as a regular JS event.

placeholder

iOS
tvOS
Optional • Type: string

A text that is displayed when the field is empty.

ref

iOS
tvOS
Optional • Type: Ref<SecureFieldRef>

text

iOS
tvOS
Optional • Type: ObservableState<string>

An observable state that holds the current text. Create one with useNativeState('') or useNativeState('initial value'). If omitted, the field manages its own internal state.

Types

SecureFieldRef

iOS
tvOS

Can be used for imperatively setting text and focus on the SecureField component.

PropertyTypeDescription
blur() => Promise<void>
-
clear() => Promise<void>

Clear the current text.

focus() => Promise<void>
-
setText(newText: string) => Promise<void>
-