Hier ist, wie ich es gerade erreicht in React Nativ:
InputPicker Präsentations Komponente:
import React from 'react'
import { StyleSheet, View, Text, Picker } from 'react-native'
const InputPicker = ({
style,
hasError,
title,
enabled,
selectedValue,
onValueChange,
items,
firstItem
}) => {
if (!items || !Array.isArray(items)) return null
const { container, errorContainer, errorText, pickerTitle, pickerItem } = styles
return (
<View style={[container, (hasError) ? errorContainer : null, style]}>
<Text style={[pickerTitle, (hasError) ? errorText : null]}>
{title}
</Text>
<Picker
style={[pickerItem, (hasError) ? errorText : null]}
selectedValue={selectedValue}
onValueChange={onValueChange}
enabled={enabled}>
<Picker.Item key={'unselectable'} label={firstItem} value={0} />
{items.map((c) => <Picker.Item key={c.id} label={c.label} value={c.label} />)}
</Picker>
</View>
)
}
const styles = StyleSheet.create({
container: {
flex: 0,
flexDirection: 'row',
alignItems: 'center'
},
pickerTitle: {
flex: 1,
textAlign: 'right'
},
pickerItem: {
flex: 2
},
errorContainer: {
backgroundColor: '#F8DEE0',
borderColor: '#DD0426',
borderWidth: 1
},
errorText: {
color: '#DD0426'
}
})
export { InputPicker }
Geordnete Container Ansicht (mit FORMIK Form Handler)
<CardSection style={{ flex: 0, alignItems: 'center' }}>
<InputPicker
title="City"
enabled
hasError={touched.person_city && errors.person_city}
selectedValue={this.props.person_city}
onValueChange={(value) => {
this.props.setFieldValue('person_city', value)
this.props.updateField({ prop: 'person_city', value })
}}
items={this.getCities()}
firstItem="Select your city"
/>
</CardSection>
Geordnete Containerthis.getCities()
getCities() {
const cities = [
{ id: 0, label: 'Nanaimo' },
{ id: 1, label: 'Victoria' },
{ id: 2, label: 'Ladysmith' }
]
return cities
}
Es funktioniert, weil es Wert auf 0 setzt, wenn „Ihre Stadt auswählen“ gerichtet, die ihm einen falsy Wert macht die touched.person_city && errors.person_city
auslöst und legt es in ein Fehlerzustand.
Auf diese Weise, beim ersten Drücken auf den Picker, "Bitte wählen Sie eine Option" würde erscheinen, als wäre es eine wählbare Option. Ich möchte es erscheinen lassen, bevor der Benutzer es drückt. Wie ein Titel, keine Option selbst. – Luiz
@Luiz Ich aktualisierte meine Antwort. Ich glaube, Sie möchten den Status nicht ändern, wenn die Option "Bitte wählen Sie eine Option" gewählt wird. –
Danke. Scheint wie react-native bietet nicht die genaue Funktionalität, die nicht einmal zeigen würde "Bitte wählen und Option", wenn der Benutzer den Picker öffnet. Aber Ihre Lösung hilft mir dabei, Abhilfe zu schaffen. – Luiz