J'ai créé cette méthode qui obtient l'état de l'entrée de la calculatrice et des vérifications si sa vide ou non. J'ai besoin d'aide avec deux choses:
actuellement, j'ai un message d'erreur qui incendie si toutes les entrées sont présentes ou non, où je veux ce que je veux, c'est pour qu'il valide chaque entrée séparément et déclencher une erreur sous chacune. Comment puis-je le faire mais gardez toujours cette fonction concise? P>
<span style={{color: "red"}}>{this.state.error}</span>
4 Réponses :
Vous pouvez le faire:
{(this.state.error !== '')
? <span style={{color: "red"}}>{this.state.error}</span>
: ''
}
Une solution supposant que vous souhaitez qu'une taille unique convient à tous les messages d'erreur uniquement en vérifiant s'il s'agissait d'un nombre ou non de les mettre dans une matrice et de définir une erreur si l'entrée n'est pas un numéro.
const inputs = [ price, downP, loan, interest ]
inputs.map(input => {
if (!input || isNaN(input)){
error = "Input must be a number"
formIsValid = false
}
}
this.setState({error})
Un moyen simple de gérer plusieurs objets nécessitant une validation consiste à stocker une erreur code> d'erreurs code> dans votre état contenant une propriété pour chaque champ de saisie. Ensuite, vous rendez l'erreur sous l'erreur sous chaque champ de saisie, selon que, il a une erreur ou non. Voici un exemple très basique:
class Calculator extends React.Component {
constructor(props) {
super(props);
this.state = {
price: 0, downP: 0, term: 0, interest: 0,
errors: { price: '', downP: '', term: '', interest: '' }
};
}
handleValidation = () => {
const { price, downP, loan, interest } = this.state;
let errors = { price: '', downP: '', term: '', interest: '' };
if (!price) {
errors.price = 'Price is required';
} else if (isNaN(price)) {
errors.price = 'Price must be a number';
}
if (!downP) {
errors.downP = 'Down Payment is required';
}
// Rest of validation conditions go here...
this.setState({ errors });
}
render() {
const { errors } = this.state;
return (
<form>
<input name="price" value={this.state.price} onChange={this.handleChange} />
{errors.price != '' && <span style={{color: "red"}}>{this.state.errors.price}</span>}
<input name="downP" value={this.state.downP} onChange={this.handleChange} />
{errors.downP != '' && <span style={{color: "red"}}>{this.state.errors.downP}</span>}
{/** Rest of components go here */}
</form>
);
}
}
Si vous souhaitez conserver vos messages d'erreur, je vous recommanderais de réorganiser votre état.
solution si évolutive (vous pouvez ajouter plus de contrôles en les ajoutant à l'état) peut ressembler à: p> Également si vous construisez une forme complexe, vous pouvez essayer de réagir une solution pour les formulaires, où tout le mécanisme pour Écouter des événements, les mises à jour de l'état, la validation sont déjà gérées pour vous. Comme réactif-Mobx-forme p> p>
Faites-vous une faveur et examinez-vous dans Formik et Yup pour la manutention et la validation de formik ... Jaredpalmer.com/formik
Abd sinon voici un tutoriel pour vous: Lepringetto .com / blog / how-faire-faire-formulaire-validation-in-réact JS