J'utilise un composant personnalisé avec react-final-form
. Lors d'un changement d'entrée, il définit la valeur dans le champ address
. Mais lorsque l'entrée est effacée, elle ne met pas à jour la valeur du champ. J'essaie donc de le faire avec des mutateurs de forme.
J'ai déjà ajouté un mutateur pour effacer le champ:
mutators={{
clear: ([address], state, { changeValue }) => {
changeValue(state, "address", () => undefined);
}
}}
J'ai essayé de l'ajouter à ma fonction onChange personnalisée, mais cela ne fonctionne pas.
onChange={event =>
props.input.onChange !== undefined
? props.input.onChange({ value: event })
: form.mutators.clear
}
Ou peut-être que cela peut se faire sans mutateurs? J'apprécierais vraiment votre aide. Voici un exemple en direct (l'effacement du champ ne fonctionne que sur le bouton, cliquez sur onClick={form.mutators.clear}
).
Tous les rappels par défaut sont gérés par le composant. Si vous voulez effacer un clic de bouton, vous pouvez créer un composant personnalisé et utiliser des méthodes de rappel natives.
onChange = (event) => {
this.setState({
address:event.target.value
});
}
onClear = () => {
this.setState({
address:''
});
}
<div>
<Field name="address">
<div>
<input
value={this.state.address}
onChange={this.onChange}
/>
</div>
</Field>
<button onClick={this.onClear}>Clear</button>
</div>
Le problème n'est pas avec le formulaire react-final-dans votre code, il est dû aux données react-da, j'ai beaucoup joué autour de votre code en 1 jour, et la réinitialisation vérifiée fonctionne très bien avec le react-final- forme
Mettez simplement à jour votre rendu avec ce code et voyez que la réinitialisation fonctionne parfaitement. Ouais! le problème vient des données de react da. Je ne suis pas sûr de ce qu'il fait en raison de moins d'informations officielles sur ce package.
<div className="App">
<h2>Dadata test</h2>
<Form
mutators={{
clear: ([address], state, { changeValue }) => {
changeValue(state, "address", () => undefined);
}
}}
onSubmit={onSubmit}
render={({ form, handleSubmit, pristine, invalid, values, errors }) => (
<form onSubmit={handleSubmit} noValidate>
<Field name="address" component="input" />
{/* {props => (
<div>
<ReactDadata
token="d19c6d0b94e64b21d8168f9659f64f7b8c1acd1f"
onChange={event =>
props.input.onChange !== undefined
? props.input.onChange({ value: event })
: form.mutators.clear
}
/>
</div>
)}
</Field> */}
<button type="submit" disabled={invalid}>
Submit
</button>
<button type="button" onClick={form.reset}>
Clear
</button>
<Fields names={["address"]}>
{fieldsState => (
<pre>{JSON.stringify(fieldsState, undefined, 2)}</pre>
)}
</Fields>
</form>
)}
/>
</div>
J'espère que cela vous aidera à résoudre le problème.