Maison  >  Questions et réponses  >  le corps du texte

Pourquoi cliquer sur une case à cocher annule-t-il la sélection précédente dans React ?

<p>J'ai plusieurs cases à cocher et lorsque je clique sur une case puis sur la suivante, la case précédente est décochée, savez-vous pourquoi ? </p> <p>Voici mon composant de case à cocher : </p> <pre class="brush:php;toolbar:false;">const Checkbox = ({ clé, identifiant, étiquette, vérifié, nom, onChange }:any) => retour ( <div className="checkbox-wrapper"> <input multiple key={id} id={id} type="checkbox" vérifié={checked} name={name} onChange={onChange} /> <label htmlFor={id}>{label}</label> </div> ) }</pré> <p>Voici à quoi ressemble le composant principal, les données sont présentes dans un tableau puis mappées, mais je ne sais pas pourquoi il décoche la case précédente, j'ai supprimé beaucoup d'autres codes JSX inutiles : ≪ /p> <pre class="brush:php;toolbar:false;">const checkboxList = [ { identifiant:0, étiquette : "majuscule", nom : "supérieur", vérifié : faux }, { identifiant : 1, étiquette : "minuscule", nom : "inférieur", vérifié : faux }, { identifiant : 2, étiquette : "numéro", nom : "numéro", vérifié : faux }, { identifiant : 3, étiquette : "symbole", nom : "symboles", vérifié : faux } ] const Générateur de mots de passe = () => const [données, setData] = useState (checkboxList) const handleChange = (id:numéro) => const updateCheckboxes = checkboxList.map((checkbox) => checkbox.id === id ? {...case à cocher, cochée : !checkbox.checked}:case à cocher) setData (mise à jour des cases à cocher) } retour ( <div className="elements"> {data.map((obj) => { retour( <clé div={obj.id}> <case à cocher multiple={vrai} identifiant={obj.id} étiquette = {obj.étiquette} vérifié= {obj.checked} nom= {obj.nom} onChange = {() => handleChange(obj.id)} /> </div> ) })} </div> ) }</pré> <p><br /></p>
P粉729198207P粉729198207410 Il y a quelques jours586

répondre à tous(1)je répondrai

  • P粉662361740

    P粉6623617402023-08-14 09:26:59

    Lorsque vous mettez à jour l'état, vous effectuez la mise à jour à partir du tableau d'origine, et non à partir de l'état actuel. Au lieu de mapper à partir du tableau d'origine (checkboxList), mappez à partir de la valeur actuelle de l'état (données) :

    const handleChange = (id:number) => {
      const updateCheckboxes = data.map((checkbox) => 
        checkbox.id === id ? {...checkbox, checked: !checkbox.checked}:checkbox)
    
      setData(updateCheckboxes)
    }

    répondre
    0
  • Annulerrépondre