R. *_*sch 2 javascript typeerror reactjs formik
我几乎只是从这里复制粘贴了这段代码:
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>
);
}
Run Code Online (Sandbox Code Playgroud)
沙箱似乎在工作,但是每当我在本地选中复选框时,我都会得到 TypeError: Cannot read property 'type' of undefined
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({
Run Code Online (Sandbox Code Playgroud)
不确定我在这里做错了什么?
小智 5
代替 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
如果碰到这个人绊倒从生产上面的错误一个基本的,可能是因为你错过添加initialValues到Formik组件。
只需通过添加修复它
<Formik initialValues={{}} onSubmit={handleSubmit}>
Run Code Online (Sandbox Code Playgroud)
这为我修好了!
| 归档时间: |
|
| 查看次数: |
6712 次 |
| 最近记录: |