我正在使用React
和Formik
库构建简单的Form。
我在form
库的withFormik
包装器包裹的formik
标记内添加了复选框。
我试图从
进行更改<input
type="checkbox"
name="flag"
checked={values.flag}
onChange={handleChange}
onBlur={handleBlur}
/>
到
<input
type="checkbox"
name="flag"
value={values.flag}
onChange={handleChange}
onBlur={handleBlur}
/>
但没有一个起作用。
组件如下
import { withFormik } from 'formik';
...
const Form = props => (
<form>
<input
type="checkbox"
name="flag"
checked={props.values.flag}
onChange={props.handleChange}
onBlur={props.handleBlur}
/>
<input
type="text"
name="name"
checked={props.values.name}
onChange={props.handleChange}
onBlur={props.handleBlur}
/>
</form>
);
const WrappedForm = withFormik({
displayName: 'BasicForm',
})(Form);
export default WrappedForm;
单击复选框时,它应该更改props.values。 但它根本不会更改道具数据。
顺便说一句,它会在文本输入框中键入内容时更改道具数据。
只有checkbox
会发生这种情况。
答案 0 :(得分:1)
使用Formik道具中的setFieldValue,可以将检查的值设置为true或false。
<CheckBox
checked={values.check}
onPress={() => setFieldValue('check', !values.check)}
/>
我的答案与“本机”复选框有关。
本文对enter code here
很有帮助。 https://heartbeat.fritz.ai/handling-different-field-types-in-react-native-forms-with-formik-and-yup-fa9ea89d867e
答案 1 :(得分:0)
我正在使用react material ui库,这是我如何管理复选框的方法:
import { FormControlLabel, Checkbox} from "@material-ui/core";
import { Formik, Form, Field } from "formik";
<Formik
initialValues={{
check: false
}}
onSubmit={(values, { setSubmitting }) => {
setTimeout(() => {
alert(JSON.stringify(values, null, 2));
setSubmitting(false);
}, 400);
}}
>
{({ values, setFieldValue }) => (
<Form className="gt-form">
<FormControlLabel
checked={values.check}
onChange={() => setFieldValue("check", !values.check)}
control={<Checkbox />}
label="save this for later"
/>
</Form>
)}
</Formik>