使用 Formik 和 React Native 进行表单验证
Form Validation WIth Formik and React Native
我正在学习使用 react-native 构建应用程序,我的一个屏幕有几个选择器组件。我想 运行 在提交之前对它们进行一些基本验证。我想确保 Picker 的值不为空。我正在尝试为此使用 Formik 并且有点困惑。我的代码看起来像这样(精简):
<View style={{flex:1, alignItems:'center'}}>
<Formik
initialValues={{ language: ''}}
onSubmit={this.handleSubmit}
validationSchema={yup.object().shape({
language: yup
.string()
.required()
})}
>
{({ values, handleChange, errors, setFieldTouched, touched, isValid, handleSubmit }) => (
<Fragment>
<View style={{borderRadius: 3, borderWidth: 1}}>
<Picker style={{ height: 40, width: 400}}
mode='dropdown'
prompt={'Select language'}
itemStyle={{ backgroundColor: "grey"}}
selectedValue={this.state.selectedLanguage}
onValueChange={(itemValue, itemIndex) =>
this.setState({selectedLanguage: itemValue})}>
<Picker.Item label='Select your language' value={null} key={0}/>
<Picker.Item label='Java' value={1} key={1}/>
<Picker.Item label='Python' value={2} key={2}/>
<Picker.Item label='Scala' value={3} key={3}/>
</Picker>
</View>
<Button title='Submit' onPress={() => {
this.handleSubmit()
}}/>
</Fragment>
)}
</Formik>
</View>
我的问题:Formik 将如何映射到我的 Picker 组件。我没有传递任何名字。如何将名称(语言)传递给 Picker。
我可以在提交前验证 selectedValue 的非空值吗?
formik 包有一个名为 "setFieldValue" 的道具,您可以像这样在选择器的 onValueChange 道具中使用它:
onValueChange={(itemValue, itemIndex) => {
setFieldValue('langauge', itemValue)
this.setState({selectedLanguage: itemValue})
}
现在,当您提交表单时,它将以名称 'language' 和所选选项传递给 formik。
我正在学习使用 react-native 构建应用程序,我的一个屏幕有几个选择器组件。我想 运行 在提交之前对它们进行一些基本验证。我想确保 Picker 的值不为空。我正在尝试为此使用 Formik 并且有点困惑。我的代码看起来像这样(精简):
<View style={{flex:1, alignItems:'center'}}>
<Formik
initialValues={{ language: ''}}
onSubmit={this.handleSubmit}
validationSchema={yup.object().shape({
language: yup
.string()
.required()
})}
>
{({ values, handleChange, errors, setFieldTouched, touched, isValid, handleSubmit }) => (
<Fragment>
<View style={{borderRadius: 3, borderWidth: 1}}>
<Picker style={{ height: 40, width: 400}}
mode='dropdown'
prompt={'Select language'}
itemStyle={{ backgroundColor: "grey"}}
selectedValue={this.state.selectedLanguage}
onValueChange={(itemValue, itemIndex) =>
this.setState({selectedLanguage: itemValue})}>
<Picker.Item label='Select your language' value={null} key={0}/>
<Picker.Item label='Java' value={1} key={1}/>
<Picker.Item label='Python' value={2} key={2}/>
<Picker.Item label='Scala' value={3} key={3}/>
</Picker>
</View>
<Button title='Submit' onPress={() => {
this.handleSubmit()
}}/>
</Fragment>
)}
</Formik>
</View>
我的问题:Formik 将如何映射到我的 Picker 组件。我没有传递任何名字。如何将名称(语言)传递给 Picker。 我可以在提交前验证 selectedValue 的非空值吗?
formik 包有一个名为 "setFieldValue" 的道具,您可以像这样在选择器的 onValueChange 道具中使用它:
onValueChange={(itemValue, itemIndex) => {
setFieldValue('langauge', itemValue)
this.setState({selectedLanguage: itemValue})
}
现在,当您提交表单时,它将以名称 'language' 和所选选项传递给 formik。