Redux-form Le composant "Field" fournit propriété onChange . Un rappel qui sera appelé chaque fois qu'un événement onChange est déclenché à partir de l'entrée sous-jacente. Ce rappel permet d'obtenir "newValue" et "previousValue" pour le champ.
React-final-form Le composant "Field" n'a pas cette propriété.
Alors, comment puis-je obtenir les mêmes fonctionnalités?
L'idée sous détection de changement est de s'abonner aux changements de valeur de Field
et d'appeler votre gestionnaire onChange
personnalisé lorsque la valeur change réellement. J'ai préparé exemple simplifié où vous pouvez le voir en action. Les détails sont dans MyField.js
fichier.
En conséquence, vous pouvez l'utiliser comme avec redux-form
:
<MyField
component="input"
name="firstName"
onChange={(val, prevVal) => console.log(val, prevVal)}
/>
Je n'ai pas utilisé redux-form, mais j'ai ajouté un wrapper super simple autour du composant Field pour écouter onChange comme ceci:
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>
);
};
React-final-form gère cette fonctionnalité avec un petit package externe.
Fondamentalement, c'est un composant supplémentaire à ajouter à l'intérieur du formulaire qui se lie à l'élément en utilisant son nom:
<Field name="foo" component="input" type="checkbox" />
<OnChange name="foo">
{(value, previous) => {
// do something
}}
</OnChange>
La documentation actuelle se trouve ici:
https://github.com/final-form/react-final-form-listeners#onchange
Vous devez utiliser le composant ExternalModificationDetector
pour écouter les modifications sur le composant champ comme ceci:
<ExternalModificationDetector name="abc">
{externallyModified => (
<BooleanDecay value={externallyModified} delay={1000}>
{highlight => (
<Field
//field properties here
/>
)}
</BooleanDecay>
)}
</ExternalModificationDetector>
En encapsulant un composant
ExternalModificationDetector
avec état dans un composantField
, nous pouvons écouter les modifications apportées à la valeur d'un champ, et en sachant si le champ est actif, déduire lorsque la valeur d'un champ change en raison de influences extérieures.Via - React-Final-FormGithub Docs
Voici un exemple de sandbox fourni dans le React-Final-Form Docs: https: // codesandbox.io/s/3x989zl866
On pourrait utiliser l'attribut parse
du champ et fournir une fonction qui fait ce dont vous avez besoin avec la valeur:
<Field
parse={value => {
// Do what you want with `value`
return value;
}}
// ...
/>