【发布时间】:2022-11-25 19:15:04
【问题描述】:
我有一个实现简单 Formik 表单的组件。该组件还具有通过单击 Leaflet JS 地图生成的事件的侦听器。我希望能够更新纬度和液化天然气每当事件处理程序被调用时,这些字段都可以通过单击地图而不是直接输入值来选择性地填充。
import React, { useEffect } from 'react';
import { Formik, Form, Field } from 'formik';
const FormComponent = () => {
const onMapClick = e => {
console.log(e.detail.lat, e.detail.lng);
};
useEffect(() => {
document.addEventListener('map:click', onMapClick);
return () => {
document.removeEventListener('map:click', onMapClick);
};
}, []);
return (
<Formik
initialValues={{ username: 'guest', lat: 50.447243, lng: 30.524933 }}
onSubmit={values => { console.log(values); }}
>
{() => (
<Form id="test">
<Field type="text" name="username" />
<Field type="text" name="lat" />
<Field type="text" name="lng" />
<button type="submit">
Submit
</button>
</Form>
)}
</Formik>
);
};
export default FormComponent;
我遇到过 Formik setFieldValue 函数,但这似乎只能从表单中访问。同样,我不能在表单函数中使用 UseEffect。
我通过更改初始值并使用 enableReinitialize 取得了一些成功,但这会重置其他字段,除非我跟踪所有字段并在每次更改时更新初始值。
实现这一目标的推荐方法是什么?我应该补充一点,该代码是一个经过精简的示例。真正的形式有更多的领域。
【问题讨论】:
标签: javascript reactjs formik