Formik 与 React Native 和 React Native Web 完全兼容。但是,由于 ReactDOM 和 React Native 处理表单和文本输入的方式存在差异,因此需要注意一些区别。本节将引导您了解这些差异以及我们认为的最佳实践。
在继续之前,以下是如何使用 Formik 与 React Native 的一个极简要点,演示了关键差异
// Formik x React Native exampleimport React from 'react';import { Button, TextInput, View } from 'react-native';import { Formik } from 'formik';export const MyReactNativeForm = props => (<FormikinitialValues={{ email: '' }}onSubmit={values => console.log(values)}>{({ handleChange, handleBlur, handleSubmit, values }) => (<View><TextInputonChangeText={handleChange('email')}onBlur={handleBlur('email')}value={values.email}/><Button onPress={handleSubmit} title="Submit" /></View>)}</Formik>);
如上所示,Formik 与 React DOM 和 React Native 使用之间的显著差异在于
handleSubmit
传递给 <Button onPress={...} />
而不是 HTML <form onSubmit={...} />
组件(因为 React Native 中没有 <form />
元素)。<TextInput />
使用 Formik 的 handleChange(fieldName)
和 handleBlur(fieldName)
而不是直接将回调分配给 props,因为我们必须从某个地方获取 fieldName
,并且在 React Native 中我们无法像 Web 中那样自动获取它(使用 input name 属性)。您还可以使用 setFieldValue(fieldName, value)
和 setFieldTouched(fieldName, bool)
作为替代。