Voulez-vous demander une fonctionnalité ou signaler un bogue ?
Punaise
Quel est le comportement actuel?
Un avertissement s'affiche dans la console pour un composant dont toutes les conditions suivantes sont remplies:
React.memo
Texte de cet avertissement: Warning: ComponentName: Rendered more hooks than during the previous render. This is not currently supported and may lead to unexpected behavior.
Si le comportement actuel est un bogue, veuillez fournir les étapes pour reproduire et si possible une démo minimale du problème. Collez le lien vers votre exemple JSFiddle (https://jsfiddle.net/Luktwrdm/) ou CodeSandbox (https://codesandbox.io/s/new) ci-dessous:
https://codesandbox.io/s/71lr16j491
Quel est le comportement attendu?
Aucun avertissement ne doit être affiché car les règles des crochets sont respectées. De plus, le comportement doit être cohérent, peu importe si React.memo
est utilisé ou non.
Quelles versions de React et quel navigateur / système d'exploitation sont concernés par ce problème?
Réagir 16.8.1
Ma première lecture est qu'il s'agit d'un bug.
J'ai remarqué ce même problème dans la version 16.8.1
. Cependant, dans mon cas, il n'y a pas de composant mémorisé entre l'endroit où un Promise
est lancé et le composant Suspense
.
Le composant déclare deux hooks en haut, avant que le Promise
soit lancé et que l'avertissement n'apparaisse. J'ai déplacé l'appel en jetant le Promise
par-dessus, avant les crochets et la même chose se produit. L'avertissement disparaît s'il n'y a pas de Promise
jeté dans le composant.
Une maquette de mon composant est quelque chose comme:
function Component(props) {
const [state, setState] = useState()
useEffect(...)
// Promise is thrown somewhere after these two
// hooks on top, but before the return statement.
return (
...
)
}
Peut le confirmer.
Corrigé dans 16.8.2.
https://codesandbox.io/s/vmmkmvo6pl
Commentaire le plus utile
Corrigé dans 16.8.2.
https://codesandbox.io/s/vmmkmvo6pl