Dans la capture d'écran de l'image ci-dessous, je rends les champs obligatoires, alors cliquez sur le bouton d'enregistrement. Si des champs sont alors ce champ vide que je veux mettre en évidence avec une bordure rouge dans React comment est-ce possible? ( https://blueprintjs.com/docs/#core/components/text-inputs )
constructor(props) { super(props); this.state = { firstName: '', lastName: '', email: '', password: '', }; this.handleChange = this.handleChange.bind(this); this.registerForm = this.registerForm.bind(this); } handleChange(event) { this.setState({[event.target.name]: event.target.value}); } registerForm(){ if(this.state.firstName.trim() && this.state.lastName.trim() && this.state.email && this.state.password){ console.log("registration successfully..!!"); }else{ console.log("all * marked fields mandatory"); } } render() { return ( <div> <h2>Fill Registration Details..!!</h2> <InputGroup placeholder="Enter First Name...*" name="firstName" value={this.state.firstName} onChange={this.handleChange}/> <InputGroup placeholder="Enter Last Name...*" name="lastName" value={this.state.lastName} onChange={this.handleChange}/> <InputGroup placeholder="Enter your email...*" name="email" value={this.state.email} onChange={this.handleChange}/> <InputGroup placeholder="Enter your password...*"name="password" value={this.state.password} onChange={this.handleChange}/> <Button intent="Primary" onClick={this.registerForm}>Register</Button> </div> ) }
3 Réponses :
Vous pouvez créer une classe CSS - disons .red-border
et l'ajouter à votre entrée chaque fois que sa valeur est vide (votre composant doit pouvoir utiliser ce prop className et le transmettre à votre composant natif <input />
)
class InputGroup extends React.Component { // code render () { return( // code <input value={this.props.value} className={!this.state.password.length ? '' : 'red-border'} /> ); } };
Bien qu'il puisse être préférable de conserver ce genre de chose à l'intérieur de votre composant InputGroup
, limitant ainsi la logique de votre composant à un seul fichier
<InputGroup placeholder="Enter your password...*" name="password" className={!this.state.password.length ? '' : 'red-border'} value={this.state.password} onChange={this.handleChange} />
Avez-vous créé la classe CSS? Il est également important que votre composant InputGroup
sache comment transmettre ce nom de classe à son composant natif d' input
interne. Pouvez-vous également publier le code de votre composant ÌnputGroup`?
Ce fil pourrait également vous aider: stackoverflow.com/questions/30533171/...
Saraband Je veux mettre en évidence en cliquant sur le bouton si le champ est vide mais il met déjà en évidence s'il est vide
S'il vous plaît donnez-moi une solution J'ai besoin d'aide lorsque je clique sur le bouton et que le champ est vide, alors je veux mettre en évidence avec une bordure de couleur rouge pas vide surligner le temps cliquez sur le bouton veuillez me donner la solution
Une solution, comme l'a indiqué @Saraband, consiste à modifier le nom de classe de votre nœud selon que votre champ de saisie contient ou non une erreur:
<input type='text' required/>
Vous pouvez ensuite l'utiliser avec le CSS suivant qui affichera une bordure rouge (par exemple):
.error input { border-bottom: 1px solid #eb516d; }
Une autre façon consiste à utiliser l'attribut natif required
de la balise d' input
, mais cette méthode est difficile à personnaliser:
<InputGroup placeholder="Enter your password...*" name="password" className={this.state.password.length ? '' : 'error'} value={this.state.password} onChange={this.handleChange} />
Je veux mettre en évidence lorsque le champ de clic sur le bouton est vide mais il est déjà mis en évidence s'il est vide
Pour ceux qui pourraient être à la recherche d'une solution à cette question, la solution ci-dessous ne sera validée qu'une fois le bouton d'envoi cliqué. Vous pouvez ajouter une classe css personnalisée pour styliser la balise d'entrée.
import React, { useState } from 'react'; const ValidateInput = () => { // set isSubmitting to false by default // this will make sure error class is not added by default const [isSubmitting, setIsSubmitting] = useState(false); const [inputValue, setInputValue] = useState(''); const submitHandler = (event) => { event.preventDefault(); // this will trigger the error validation setIsSubmitting(true); // add the rest of the logic here }; return ( <form onSubmit={submitHandler}> <input value={inputValue} onChange={(event) => { setInputValue(event.target.value); }} className={isSubmitting && !inputValue ? 'error' : undefined} /> <button type="submit">Submit</button> </form> ); }; export default ValidateInput;