Lien vers la question d'origine: Comment définir l'état de la propriété calculée à l'aide de crochets
J'essaie essentiellement de mettre à jour un ancien projet pour utiliser des crochets et des composants fonctionnels lorsque cela est possible. J'ai besoin de mettre à jour l'état d'une propriété calculée à l'aide de hooks dans la fonction handleChange. Comment procéder?
J'ai supprimé le code non pertinent dans l'extrait de code suivant:
import React, { useState } from 'react' import AuthenticationService from '../service/AuthenticationService'; export const LoginComponent1 = () => { const [userName, setUserName] = useState('Neil'); const [password, setPassword] = useState(''); const [loginStatus, setLoginStatus] = useState(false); const handleChange = (event) => { this.setState( { [event.target.name]: event.target.value } ); } const loginClicked = () => { ... } const enterPressed = (event) => { ... } return ( <div className="container"> <h1>Login</h1> <div className="container"> User Name: <input className= "userNameBox" type="text" placeholder="Neil" name="username" value={userName} onChange={handleChange} onKeyPress={enterPressed}></input> Password: <input className= "userNameBox" type="password" id="myInput" name="password" value={password} onChange={handleChange} onKeyPress={enterPressed}></input> <hr></hr> </div> </div> ) } export default LoginComponent1
Merci!
3 Réponses :
this.setState
n'existe que dans les composants de classe, pas dans les composants fonctionnels.
Pour mettre à jour l'état avec les hooks useState
, appelez simplement le setter correspondant. Dans votre exemple, appelez setUserName
pour mettre à jour le nom d'utilisateur, setPassword
pour mettre à jour le mot de passe, etc.
Lors de la déclaration d'un état dans un composant fonctionnel, le deuxième paramètre que vous passez est une méthode utilisée pour définir l'état. this.setState
est disponible uniquement dans les composants de classe. Voir ici
Dans votre exemple de définition du mot de passe d'état, vous devez appeler la méthode setPassword
avec value.
Par exemple: setPassword ('ceci est mon mot de passe')
si vous voulez créer un gestionnaire générique comme avant vous aviez un composant basé sur react avec plusieurs gestionnaires d'état, vous pouvez créer un gestionnaire d'objet après vos hooks useState
et refactoriser votre handleChange comme:
const handler = { username: setUserName, password: setPassword } const handleChange = (event) => handler[event.target.name](event.target.value)