J'ai un problème dans la gestion des cases à cocher chargées dynamiquement à partir d'un jeu de données en React. (J'utilise React avec uniquement des composants fonctionnels et des hooks avec la bibliothèque reactstrap) Voici le jeu de données :
[
{
"expertiseAreaId": 1,
"descriptionEng": "Analysis and Mapping",
"descriptionFra": "Analyse et cartographie",
"checked": false
},
{
"expertiseAreaId": 1,
"descriptionEng": "Strategic planning",
"descriptionFra": "Planification stratégique",
"checked": false
},
{
"expertiseAreaId": 1,
"descriptionEng": "Project/Proposal Design",
"descriptionFra": "Projet/Proposition de projet",
"checked": false
},
....
]
Le jeu de données est contenu dans expertiseAreasData. J'utilise une autre variable d'état (expertiseAreaIds) pour stocker les booléens qui seront lus dans la propriété checked des cases à cocher (type Input="checkbox")
const [expertiseAreaIds, setExpertiseAreaIds] = useState([false, false, false, false, false, false, false, false, false, false, false, false, false, false]);
const [expertiseAreasData, setExpertiseAreasData] = useState([]);
Voici le JSX :
Domaine d'expertise *
{expertiseAreasData.length > 0 ? expertiseAreasData.map((data, idx) => (
onChangeExpertiseAreas(idx)} />
{language.toUpperCase() === "EN" && {data.descriptionEng}}
{language.toUpperCase() === "FR" && {data.descriptionFra}}
)) : Aucune donnée chargée.
}
Lorsque j'appelle l'événement onChangeExpertiseAreas, je mets à jour à la fois expertiseAreaIds et expertiseAreasData
const onChangeExpertiseAreas = (idx) => {
var data = expertiseAreaIds;
var value = data[idx];
data[idx] = !value;
setExpertiseAreaIds(data);
var dt = expertiseAreasData;
var element = dt[idx];
element.checked = !value;
dt[idx] = element;
setExpertiseAreasData([]);
setExpertiseAreasData(dt);
}
Lorsque je coche la case à cocher, l'état est mis à jour correctement, mais le JSX n'est pas mis à jour et j'affiche toujours les cases à cocher à false (état initial). J'espère que quelqu'un d'autre a eu le même problème