Comme vous voyez j'ai essayé de bidouiller pour que ca fonctionne dans le dernier then. Mais non ca ne fonctionne pas. Il ni a pas de "rerender" après l'utilisation de ma function populate.
Pour en revenir à ton problème principal, lorsque tu modifie l'état local d'un composant en utilisant le hook useState,
en interne React avant de mettre à jour le composant vérifie si la nouvelle valeur est différente de l'ancienne valeur et si la nouvelle valeur n'est pas différente React annule la mise à jour du composant.
La plupart du temps c'est pratique cela évite des "mise à jour superflux" des composant,
par contre React compare les valeur avec un simple test d'égalité.
Dans ton cas tu as une instance de class ranger dans ton state, et quand tu fait:
setUserInfo(userInfo)
Tu demandes à modifier l'état local avec la même instance de class
quand React va comparer les valeurs (l'ancienne et la nouvelle) elle seront identique (même avec un simple test d'égaliter)
car un test d'égalité sur des objet va venir comparer leurs références (à l'instar de leur valeurs).
Une des façon de régler le problème pourrait être de ré instancier ton model au moment où tu récupères tes données,
avec une truc du genre:
const newUserInfo = new ModelUserInfo();
newUserInfo.populate(json);
// modifie l'état local avec une nouvelle instance
// pour que la valeur soit détecter comme différente par React et qu'il n'annule pas le rendu
setUserInfo(newUserInfo);
Ce qui donne une approche un peut bizzare.
Une autre solution qui me semble plus naturel serait de stocker uniquement le JSON dans l'état local est pas l'instance du model en entier,
puis d'instancier le model en prenant les valeur dans l'état local:
// stock uniquement le JSON du model dans l'état local
let [userInfo, setUserInfo] = useState({})
const userModel = new ModelUserInfo();
userModel.hydrate(userInfo);
Comme le composant sera recharger à chaque changement de userInfo ton userModel sera ré instancier et ré hydrater automatiquement.
Ce qui te permet de modifier ton état local d'une façon plus naturelle:
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
suggestion de présentation.
La meilleure solution est toujours la plus simple. Ma chaîne Youtube [Tutos pour débutants]
suggestion de présentation.
La meilleure solution est toujours la plus simple. Ma chaîne Youtube [Tutos pour débutants]