Redux-form“字段”组件提供onChange property。每当从基础输入触发onChange事件时将调用的回调。此回调允许为字段获取“newValue”和“previousValue”。
React-final-form“字段”组件没有此属性。
那么,我如何才能获得相同的功能?
答案 0 :(得分:6)
变更检测中的想法是订阅Field
的值更改,并在值实际更改时调用您的自定义onChange
处理程序。我准备了simplified example,你可以在其中看到它的实际效果。详细信息位于MyField.js
文件中。
结果您可以像使用redux-form
一样使用它:
<MyField
component="input"
name="firstName"
onChange={(val, prevVal) => console.log(val, prevVal)}
/>
&#13;
答案 1 :(得分:4)
我还没有使用过redux-form,但是我在Field组件周围添加了一个超级简单的包装器来监听onChange,就像这样:
const Input = props => {
const {
name,
validate,
onChange,
...rest
} = props;
return (
<Field name={name} validate={validate}>
{({input, meta}) => {
return (
<input
{...input}
{...rest}
onChange={(e) => {
input.onChange(e); //final-form's onChange
if (onChange) { //props.onChange
onChange(e);
}
}}
/>
)}}
</Field>
);
};
答案 2 :(得分:2)
您需要使用ExternalModificationDetector
组件来监听字段组件的更改,如下所示:
<ExternalModificationDetector name="abc">
{externallyModified => (
<BooleanDecay value={externallyModified} delay={1000}>
{highlight => (
<Field
//field properties here
/>
)}
</BooleanDecay>
)}
</ExternalModificationDetector>
将有状态
ExternalModificationDetector
组件包装在一个Field
组件,我们可以监听字段值的变化,并通过 知道该字段是否有效,推断出一个字段 由于外部影响,价值变化。通过 - React-Final-Form Github Docs
以下是 React-Final-Form 文档中提供的沙箱示例:https://codesandbox.io/s/3x989zl866
答案 3 :(得分:1)
React-final-form通过一个很小的外部程序包即可处理此功能。
基本上,这是添加到使用其名称绑定到元素的表单内部的附加组件:
$('select').val('stateElementId')
当前文档可以在这里找到:
https://github.com/final-form/react-final-form-listeners#onchange
答案 4 :(得分:0)
一个人可以使用字段的parse
属性,并提供一个功能来实现您需要的值:
<Field
parse={value => {
// Do what you want with `value`
return value;
}}
// ...
/>