Formik - TypeError:无法读取未定义的属性“type”?
2020-01-23
31463
我基本上只是 从这里复制粘贴了这段代码 :
function Checkbox(props) {
return (
<Field name={props.name}>
{({ field, form }) => (
<label>
<input
{...field}
type="checkbox"
checked={field.value.includes(props.value)}
onChange={() => {
const set = new Set(field.value);
if (set.has(props.value)) {
set.delete(props.value);
} else {
set.add(props.value);
}
field.onChange(field.name)(Array.from(set)); //the problem seems to lie here somewhere!
form.setFieldTouched(field.name, true);
}}
/>
{props.value}
</label>
)}
</Field>
);
}
function App() {
return (
<Formik
initialValues={{ roles: [] }}
onSubmit={values => alert(JSON.stringify(values, null, 2))}
>
{formik => (
<div>
Clicking checks affects `VALUES` and `ERRORS` but never `TOUCHED`...
<div>
<Checkbox name="roles" value="admin" />
<Checkbox name="roles" value="customer" />
</div>
<br />
VALUES:
<pre>{JSON.stringify(formik.values, null, 2)}</pre>
ERRORS:
<pre>{JSON.stringify(formik.errors, null, 2)}</pre>
TOUCHED:
<pre>{JSON.stringify(formik.touched, null, 2)}</pre>
</div>
)}
</Formik>
);
}
沙盒似乎正在运行,但每当我在本地选中一个复选框时,我都会收到
TypeError:无法读取未定义的属性“type”
TypeError: Cannot read property 'type' of undefined
(anonymous function)
node_modules/formik/dist/formik.esm.js:659
656 | dispatch({
657 | type: 'SET_ERRORS',
658 | payload: errors
> 659 | });
660 | }, []);
661 | var setValues = useEventCallback(function (values) {
662 | dispatch({
不确定我在这里做错了什么?
3个回答
如果有人在使用基本工具时偶然发现上述错误,可能是因为您忘记将
initialValues
添加到
Formik
组件。
只需添加
<Formik initialValues={{}} onSubmit={handleSubmit}>
即可修复它
这已经帮我修复了!
Sooraj
2021-04-28
不要使用 field.onChange,而要使用 setFieldValue 辅助函数
field.onChange(field.name)(Array.from(set)); //the problem seems to lie here somewhere!
替换为:
form.setFieldValue(field.name,(Array.from(set)));
https://codesandbox.io/embed/formik-checkbox-example-l9p1p?fontsize=14&hidenavigation=1&theme=dark
Tabish Javed
2020-01-23
您的 react-redux 中存在一些操作问题,因此我建议您检查您的操作类型,我认为您的操作类型未定义,这就是为什么它显示未定义并出现错误。
Rahul Gupta
2020-01-23