Final Form 中如何监听表单值变化并实时更新?
我在用 Final Form 做一个动态表单,想在用户输入时实时打印当前的表单值,但不知道怎么监听整个表单的变化。试过在 Field 里加 onChange,但只能拿到单个字段的值。
看到文档里有 subscription 和 mutators,但没搞明白怎么用。有没有办法像 React Hook Form 那样直接 watch 整个表单?
import { Form, Field } from 'react-final-form';
const MyForm = () => (
<Form
onSubmit={values => console.log(values)}
render={({ handleSubmit }) => (
<form onSubmit={handleSubmit}>
<Field name="email">
{({ input }) => <input {...input} />}
</Field>
{/* 这里怎么监听所有字段的实时变化? */}
</form>
)}
/>
);
subscription属性。这个属性允许你订阅表单的状态变化,比如字段的值变化。虽然不像 React Hook Form 的watch那么直观,但通过subscription你可以实现类似的效果。你可以在
Form组件中添加subscription属性,订阅values变化。然后在render方法中,你可以获取这些变化后的值,并在每次变化时打印出来。下面是修改后的代码示例:
在这个例子中,
subscription={{ values: true }}订阅了表单的所有值变化。然后在render函数中,通过form: { values }可以访问当前的表单值,并在每次变化时打印出来。这样你就可以实时监控整个表单的输入变化了。希望这能帮到你。
subscription={{ values: true }},render 函数的第二个参数就会拿到实时变化的 values 对象:subscription 的作用就是告诉 Form 你要订阅哪些状态,除了 values 还可以订阅 pristine、invalid、submitting 等等。