Grundlæggende TextInput og tastaturtyper
Render en TextInput, bind den til state med onChangeText, konfigurér tastaturtypen til e-mail- eller numerisk input, og håndtér hændelsen for Retur-tasten.
Grundlæggende TextInput og tastaturtyper er en gratis React Native Academy-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i React Native Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. React Native Academy-kurset indeholder 4 lektioner i alt.
TextInput-komponenten
TextInput er React Native-komponenten til at modtage tastaturinput fra brugere. Den gengives som et indbygget tekstfelt på både iOS og Android og giver brugerne platformens naturlige skriveoplevelse med blandt andet autokorrektion, forudsigende tekst og systemets tastaturgenveje. Importér den fra react-native, og brug den til alt input, der kræver et tastatur: søgefelter, loginformularer, indstillingsfelter og felter til chatbeskeder. Uden typografi har TextInput ingen synlig kant på iOS — anvend altid typografi, så feltet er synligt for brugerne.
import { TextInput, View, StyleSheet } from 'react-native';
import { useState } from 'react';
export default function BasicInput() {
const [text, setText] = useState('');
return (
<View style={{ padding: 16 }}>
<TextInput
value={text}
onChangeText={setText}
placeholder='Type something here...'
style={styles.input}
/>
</View>
);
}
const styles = StyleSheet.create({
input: {
borderWidth: 1,
borderColor: '#ccc',
borderRadius: 10,
paddingHorizontal: 14,
paddingVertical: 12,
fontSize: 16,
backgroundColor: '#fff',
},
});onChangeText sammenlignet med onChange
Callbacken onChangeText er den mest almindelige måde at reagere på tekstinput på. Den modtager den nye tekststreng direkte som argument, så den er nem at sende videre til en setter fra useState: onChangeText={setText}. Callbacken onChange på et lavere niveau modtager et komplet hændelsesobjekt (event.nativeEvent.text) — nyttigt, når du også har brug for andre metadata om hændelsen, f.eks. markørens placering. Til de fleste formål er onChangeText enklere og det foretrukne valg. Brug kun onChange, når du har brug for oplysningerne fra den indbyggede hændelse.
import { TextInput } from 'react-native';
import { useState } from 'react';
function TextInputExample() {
const [text, setText] = useState('');
return (
<>
{/* Simple: receives the string directly */}
<TextInput
onChangeText={(newText) => setText(newText)}
// shorthand equivalent:
// onChangeText={setText}
/>
{/* Advanced: receives the full event object */}
<TextInput
onChange={(event) => {
console.log('text:', event.nativeEvent.text);
console.log('selection:', event.nativeEvent.selection);
}}
/>
</>
);
}Tastaturtyper til forskellige input
Proppen keyboardType styrer, hvilken tastaturvariant operativsystemet viser. Til numerisk input viser 'numeric' et numerisk tastatur. Til e-mailadresser indeholder 'email-address' tasterne @ og . tydeligt. 'phone-pad' viser telefonens opkaldslayout. 'decimal-pad' minder om numeric, men indeholder også et decimaltegn. 'url' viser genveje til / og .com. Den korrekte tastaturtype forbedrer brugervenligheden — den reducerer antallet af tastetryk, der kræves for at indtaste data, og forhindrer brugere i at skrive ugyldige tegn.
import { View, TextInput, Text, StyleSheet } from 'react-native';
export default function KeyboardTypesDemo() {
return (
<View style={{ padding: 16, gap: 12 }}>
<TextInput style={styles.input} keyboardType='default' placeholder='Default text' />
<TextInput style={styles.input} keyboardType='email-address' placeholder='email@example.com' />
<TextInput style={styles.input} keyboardType='numeric' placeholder='Enter a number' />
<TextInput style={styles.input} keyboardType='phone-pad' placeholder='Phone number' />
<TextInput style={styles.input} keyboardType='decimal-pad' placeholder='Price (0.00)' />
<TextInput style={styles.input} keyboardType='url' placeholder='https://...' />
</View>
);
}
const styles = StyleSheet.create({
input: { borderWidth: 1, borderColor: '#ccc', borderRadius: 8, padding: 12, fontSize: 16, backgroundColor: '#fff' },
});Sikker tekstindtastning til adgangskoder
For adgangskodefelter skal du angive secureTextEntry={true} for at skjule de indtastede tegn med prikker. Det er vigtigt for alle felter, der indeholder følsomme data — adgangskoder, pinkoder og sikkerhedskoder. Du kan tilføje en vis/skjul-adgangskodefunktion ved at administrere en boolesk showPassword-værdi i tilstanden og skifte secureTextEntry. Angiv også autoCapitalize='none' og autoCorrect={false} på adgangskodefelter — du ønsker ikke, at autokorrektion eller store bogstaver ændrer brugerens adgangskode, mens den indtastes.
import { TextInput, TouchableOpacity, Text, View, StyleSheet } from 'react-native';
import { useState } from 'react';
export default function PasswordInput() {
const [password, setPassword] = useState('');
const [visible, setVisible] = useState(false);
return (
<View style={styles.wrapper}>
<TextInput
value={password}
onChangeText={setPassword}
secureTextEntry={!visible}
autoCapitalize='none'
autoCorrect={false}
placeholder='Password'
style={styles.input}
/>
<TouchableOpacity
style={styles.toggle}
onPress={() => setVisible(v => !v)}
>
<Text style={{ fontSize: 18 }}>{visible ? '🙈' : '👁'}</Text>
</TouchableOpacity>
</View>
);
}
const styles = StyleSheet.create({
wrapper: { flexDirection: 'row', alignItems: 'center', borderWidth: 1, borderColor: '#ccc', borderRadius: 10, paddingHorizontal: 14 },
input: { flex: 1, paddingVertical: 12, fontSize: 16 },
toggle: { paddingLeft: 8 },
});autoCapitalize og autoCorrect
autoCapitalize styrer, hvornår operativsystemet skriver det første bogstav med stort. Værdierne er: 'none' (skriv aldrig med stort), 'sentences' (første bogstav i hver sætning, standard), 'words' (første bogstav i hvert ord) og 'characters' (alle tegn). Brug 'none' til brugernavne, e-mailadresser og adgangskoder. Brug 'words' til navnefelter. autoCorrect={false} deaktiverer autokorrektion helt, hvilket er vigtigt for brugernavne, tekniske termer og alle felter, hvor brugeren ved, hvad vedkommende skriver.
import { View, TextInput, StyleSheet } from 'react-native';
export default function FormInputs() {
return (
<View style={{ padding: 16, gap: 12 }}>
{/* Name: capitalize each word, allow autocorrect */}
<TextInput
style={styles.input}
placeholder='Full name'
autoCapitalize='words'
autoCorrect={true}
/>
{/* Username: no caps, no autocorrect */}
<TextInput
style={styles.input}
placeholder='@username'
autoCapitalize='none'
autoCorrect={false}
/>
{/* Email: no caps, no autocorrect */}
<TextInput
style={styles.input}
placeholder='Email address'
keyboardType='email-address'
autoCapitalize='none'
autoCorrect={false}
/>
</View>
);
}
const styles = StyleSheet.create({
input: { borderWidth: 1, borderColor: '#ccc', borderRadius: 8, padding: 12, fontSize: 16 },
});returnKeyType og onSubmitEditing
Proppen returnKeyType ændrer etiketten på tastaturets Retur-tast: 'done', 'go', 'next', 'search' og 'send'. Brug 'next' for at angive, at et tryk på Retur flytter fokus til det næste felt. Callbacken onSubmitEditing udløses, når brugeren trykker på Retur-tasten. Kombinér returnKeyType='next' med onSubmitEditing for programmatisk at sætte fokus på den næste TextInput ved hjælp af en ref — det skaber en jævn, fanelignende navigation mellem formularfelter, som brugerne forventer på mobilen.
import { View, TextInput, StyleSheet, useRef } from 'react-native';
export default function MultiFieldForm() {
const emailRef = useRef(null);
const passwordRef = useRef(null);
return (
<View style={{ padding: 16, gap: 12 }}>
<TextInput
ref={emailRef}
style={styles.input}
placeholder='Email'
keyboardType='email-address'
returnKeyType='next'
onSubmitEditing={() => passwordRef.current?.focus()}
/>
<TextInput
ref={passwordRef}
style={styles.input}
placeholder='Password'
secureTextEntry
returnKeyType='done'
onSubmitEditing={() => console.log('Form submitted!')}
/>
</View>
);
}
const styles = StyleSheet.create({
input: { borderWidth: 1, borderColor: '#ccc', borderRadius: 8, padding: 12, fontSize: 16 },
});TextInput med flere linjer
Til tekst over flere linjer, f.eks. en biografi, besked eller kommentar, skal du tilføje proppen multiline. TextInput udvides, når brugeren skriver nye linjer, og understøtter linjeskiftstegn. Brug numberOfLines på Android til at angive den indledende højde (iOS tilpasser automatisk størrelsen). Typografien textAlignVertical: 'top' (kun Android) forhindrer, at teksten starter lodret midt i inputfeltet. På iOS vokser inputfelter med flere linjer automatisk, så de passer til indholdet, når der ikke er angivet en fast højde. Kombiner maxLength med visning af en tegntæller i felter til skrivning af beskeder.
import { TextInput, Text, View, StyleSheet } from 'react-native';
import { useState } from 'react';
export default function BioInput() {
const [bio, setBio] = useState('');
const MAX_LENGTH = 200;
return (
<View style={{ padding: 16 }}>
<TextInput
value={bio}
onChangeText={setBio}
placeholder='Tell us about yourself...'
multiline
numberOfLines={4} // Android: initial height
maxLength={MAX_LENGTH}
style={styles.input}
textAlignVertical='top' // Android: align text to top
/>
<Text style={styles.counter}>
{bio.length}/{MAX_LENGTH}
</Text>
</View>
);
}
const styles = StyleSheet.create({
input: { borderWidth: 1, borderColor: '#ccc', borderRadius: 10, padding: 12, fontSize: 15, minHeight: 100 },
counter: { textAlign: 'right', color: '#999', fontSize: 12, marginTop: 4 },
});Fokus, sløring og onFocus-/onBlur-hændelser
TextInput udløser onFocus, når brugeren trykker i feltet (tastaturet vises), og onBlur, når brugeren trykker et andet sted (tastaturet skjules). Brug disse hændelser til at vise eller skjule hjælpetekst, ændre kantfarven for at angive den aktive tilstand eller udløse validering af feltet. Et almindeligt mønster er kun at validere et felt efter at brugeren har forladt det (ved sløring), ikke mens brugeren stadig skriver — sådan undgår du at vise fejlmeddelelser, før brugeren er færdig med at skrive. Registrer hvilket felt der har fokus, med en tilstandsvariabel, hvis du skal formatere flere inputfelter forskelligt afhængigt af fokus.
import { TextInput, View, StyleSheet } from 'react-native';
import { useState } from 'react';
export default function FocusableInput({ placeholder, onBlurValidate }) {
const [focused, setFocused] = useState(false);
const [value, setValue] = useState('');
const [error, setError] = useState('');
function handleBlur() {
setFocused(false);
const err = onBlurValidate ? onBlurValidate(value) : '';
setError(err);
}
return (
<View>
<TextInput
value={value}
onChangeText={setValue}
onFocus={() => setFocused(true)}
onBlur={handleBlur}
placeholder={placeholder}
style={[
styles.input,
focused && styles.focused,
error && styles.error,
]}
/>
</View>
);
}
const styles = StyleSheet.create({
input: { borderWidth: 1.5, borderColor: '#ddd', borderRadius: 10, padding: 12, fontSize: 16 },
focused: { borderColor: '#4f86f7', shadowColor: '#4f86f7', shadowOpacity: 0.2, shadowRadius: 4, shadowOffset: { width: 0, height: 2 } },
error: { borderColor: '#e74c3c' },
});Skjul tastaturet
På mobilen skjules tastaturet ikke automatisk, når brugeren trykker uden for et TextInput. Brug Keyboard.dismiss() fra react-native til at skjule det programmatisk. Pak indholdet på skærmen ind i en TouchableWithoutFeedback, der kalder Keyboard.dismiss() ved tryk, så tastaturet skjules, når brugeren trykker et sted uden for det. Du kan også bruge proppen keyboardDismissMode på ScrollView: 'on-drag' skjuler tastaturet, når brugeren begynder at rulle, hvilket giver en behagelig mobilbrugeroplevelse.
import { TouchableWithoutFeedback, Keyboard, ScrollView, TextInput, StyleSheet, View } from 'react-native';
export default function DismissibleForm() {
return (
<TouchableWithoutFeedback onPress={Keyboard.dismiss} accessible={false}>
<ScrollView
style={{ flex: 1 }}
keyboardDismissMode='on-drag' // dismiss on scroll
keyboardShouldPersistTaps='handled'
>
<View style={{ padding: 16, gap: 12 }}>
<TextInput style={styles.input} placeholder='Name' />
<TextInput style={styles.input} placeholder='Email' keyboardType='email-address' />
<TextInput style={styles.input} placeholder='Message' multiline numberOfLines={4} textAlignVertical='top' />
</View>
</ScrollView>
</TouchableWithoutFeedback>
);
}
const styles = StyleSheet.create({
input: { borderWidth: 1, borderColor: '#ccc', borderRadius: 8, padding: 12, fontSize: 16 },
});KeyboardAvoidingView
Når tastaturet vises, dækker det den nederste del af skærmen og kan skjule tekstinput i formularer. Pak skærmen ind i KeyboardAvoidingView for automatisk at skubbe indholdet op, når tastaturet åbnes. Angiv behavior='padding' på iOS og behavior='height' på Android (brug Platform.OS til at vælge den rigtige værdi). Kombiner den med keyboardVerticalOffset for at tage højde for højden på sidehovedet. På skærme med mange inputfelter giver det den bedste oplevelse at kombinere KeyboardAvoidingView med en ScrollView indeni.
import { KeyboardAvoidingView, Platform, ScrollView, TextInput, TouchableOpacity, Text, StyleSheet } from 'react-native';
export default function LoginScreen() {
return (
<KeyboardAvoidingView
style={{ flex: 1 }}
behavior={Platform.OS === 'ios' ? 'padding' : 'height'}
keyboardVerticalOffset={60} // adjust for header height
>
<ScrollView contentContainerStyle={styles.form}>
<TextInput style={styles.input} placeholder='Email' keyboardType='email-address' />
<TextInput style={styles.input} placeholder='Password' secureTextEntry />
<TouchableOpacity style={styles.btn}>
<Text style={styles.btnText}>Log In</Text>
</TouchableOpacity>
</ScrollView>
</KeyboardAvoidingView>
);
}
const styles = StyleSheet.create({
form: { padding: 24, gap: 16, flexGrow: 1, justifyContent: 'center' },
input: { borderWidth: 1, borderColor: '#ccc', borderRadius: 10, padding: 14, fontSize: 16 },
btn: { backgroundColor: '#4f86f7', padding: 16, borderRadius: 10, alignItems: 'center' },
btnText: { color: '#fff', fontWeight: 'bold', fontSize: 16 },
});Inputmaskering af formaterede værdier
Nogle inputfelter skal vise formateret indhold, mens brugeren skriver — kreditkortnumre med mellemrum for hvert fjerde ciffer, telefonnumre med bindestreger eller datoer i formatet DD/MM/YYYY. Implementer dette i hændelseshåndteringen for onChangeText: fjern formateringstegn fra det rå input, anvend formatet, og gem den formaterede tekst som tilstand. TextInput viser den formaterede værdi (fra tilstanden), men du gemmer cifrene separat, så de kan sendes. Biblioteker som react-native-mask-input leverer et TextInput med maske, som kan indsættes direkte og automatisk håndterer almindelige mønstre.
import { TextInput } from 'react-native';
import { useState } from 'react';
// Manual phone number formatting: (555) 123-4567
export default function PhoneInput({ onPhoneChange }) {
const [display, setDisplay] = useState('');
function formatPhone(raw) {
const digits = raw.replace(/\D/g, '').slice(0, 10); // digits only, max 10
let formatted = digits;
if (digits.length > 6) {
formatted = '(' + digits.slice(0,3) + ') ' + digits.slice(3,6) + '-' + digits.slice(6);
} else if (digits.length > 3) {
formatted = '(' + digits.slice(0,3) + ') ' + digits.slice(3);
} else if (digits.length > 0) {
formatted = '(' + digits;
}
setDisplay(formatted);
onPhoneChange(digits); // pass raw digits to parent
}
return (
<TextInput
value={display}
onChangeText={formatPhone}
keyboardType='phone-pad'
placeholder='(555) 123-4567'
style={{ borderWidth: 1, borderColor: '#ccc', borderRadius: 8, padding: 12, fontSize: 16 }}
/>
);
}Hurtig test
Test din forståelse af begreberne inden for React Native-mobiludvikling fra denne lektion.
Opsummering af lektionen
I denne lektion har du lært, at keyboardType viser det passende tastatur til datatypen, at returnKeyType med refs muliggør navigation mellem formularfelter som med tabulatortasten, og at KeyboardAvoidingView forhindrer tastaturet i at dække inputfelter nederst på skærmen. Dernæst ser vi på, hvordan du tilføjer trykfeedback med TouchableOpacity og Pressable.
Lær JavaScript med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 30
- Lektioner
- 120
Ofte stillede spørgsmål
Er lektionen “Grundlæggende TextInput og tastaturtyper” gratis?
Ja — alle 3 lektioner i læringssporet React Native Academy, inklusive “Grundlæggende TextInput og tastaturtyper”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. React Native Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Grundlæggende TextInput og tastaturtyper”?
Render en TextInput, bind den til state med onChangeText, konfigurér tastaturtypen til e-mail- eller numerisk input, og håndtér hændelsen for Retur-tasten. Du øver dig i React Native Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på React Native Academy?
Der kræves ingen tidligere erfaring. React Native Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.
Hvor lang tid tager lektionen “Grundlæggende TextInput og tastaturtyper”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne React Native Academy-lektion?
Ja. Alle React Native Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Grundlæggende TextInput og tastaturtyper
- Trykhåndtering med TouchableOpacity og Pressable
- Til/fra-knapper, switches og afkrydsningsfelter
- Opbygning af en enkel loginformular