【发布时间】:2020-08-31 11:16:21
【问题描述】:
我正在使用 Formik 进行验证,如果输入为空,我将收到“必需的错误”。
当我单击表单的按钮时,应呈现一个列表 (UsersFoundList)。此列表位于表单之外,其中包含进一步具有按钮的元素。当我第一次单击列表中的任何这些按钮时,它们不起作用。相反,formik 错误开始出现在输入字段中。
只有在我尝试再次提交表单时才会出现此错误。当我点击其他任何东西时不会。
const [showFlatList, setShowFlatList] = useState(false);
const handleSubmitForm = (
values: FormValues,
helpers: FormikHelpers<FormValues>,
) => {
console.log('hello', values.input)
setShowFlatList(true);
helpers.resetForm();
};
return (
<View style={styles.container}>
<View >
<Formik
initialValues={initialValues}
onSubmit={handleSubmitForm}
validationSchema={addRelationValidationSchema}>
{({ handleChange, handleBlur, handleSubmit, values }) => (
<View style={styles.searchFieldContainer}>
<View style={styles.form}>
<FieldInput
handleChange={handleChange}
handleBlur={handleBlur}
value={values.input}
fieldType="input"
icon="user"
placeholderText="E-Mail oder Telefonnummer oder Name"
/>
<ErrorMessage
name="input"
render={(msg) => <ErrorText errorMessage={msg} />}
/>
</View>
<View style={styles.buttonContainer}>
<NewButton buttonText="Suchen" onPress={handleSubmit} />
</View>
</View>
)}
</Formik>
</View>
<View style={styles.listHolder}>
{showFlatList && (
<UsersFoundList/>
)}
</View>
</View>
);
转载示例: https://snack.expo.io/@nhammad/jealous-beef-jerky
在 Android 手机中很明显。网页版的代码沙盒上没有。
编辑:刚刚意识到不仅是按钮,而且如果我单击屏幕上的任何位置,错误就会再次出现。
【问题讨论】:
-
如果表单无效,则永远不会调用提供给 formik 的
onSubmit函数。由于存在验证错误,它会短路。如果您想做某事而不管是否有表单错误,那么您必须将您的showFlatList移出 onsubmit 并在用户按下按钮时将其与handleSubmit分开调用。 -
是的,但该列表在表单之外。我单击列表中的一个按钮,而不是单击表单按钮,那么为什么要调用 handleSubmit 呢?请看codesandbox@Adam
-
当我按下用户列表上的按钮时,表单没有提交,验证错误也没有出现,不知道你的意思?
-
我也无法重现这个,不过听起来像是一个事件冒泡问题。
-
在代码框上,它在安卓手机中向我显示错误。你在网上查看@sandrooco
标签: javascript css reactjs react-native formik