Des données proviennent du long sondage toutes les 5 secondes et je souhaite que mon composant envoie une opération chaque fois qu'un élément du tableau (ou la longueur du tableau lui-même) change. Comment puis-je empêcher useEffect d'entrer dans une boucle infinie lors du passage d'un tableau en tant que dépendance, tout en parvenant à planifier certaines opérations si des valeurs changent ?
useEffect(() => { console.log(outcomes) }, [outcomes])
où outcomes
是一个 ID 数组,例如 [123, 234, 3212]
。数组中的项目可能会被替换或删除,因此数组的总长度可能(但不一定)保持不变,因此传递 outcomes.length
en tant que dépendance n'est pas le cas.
outcomes
Sélecteur personnalisé de resélection :
const getOutcomes = createSelector( someData, data => data.map(({ outcomeId }) => outcomeId) )
L'utilisation de JSON.stringify() ou de toute méthode de comparaison approfondie peut être moins efficace, si vous connaissez la forme de l'objet à l'avance, vous pouvez écrire votre propre hook d'effet pour déclencher un rappel à votre fonction d'égalité personnalisée en fonction du résultat.
useEffect
的工作原理是检查依赖项数组中的每个值是否与前一渲染中的值相同,如果其中一个不是,则执行回调。因此,我们只需要使用useRef
保留我们感兴趣的数据实例,并且仅在自定义相等性检查返回false
Attribuez une nouvelle instance pour déclencher l'effet.Utilisation
Pour aller plus loin, nous pouvons également réutiliser ce hook en créant un hook d'effets qui accepte une fonction d'égalité personnalisée.
Utilisation
Démonstration en direct
Vous pouvez passer
JSON.stringify(outcomes)
comme liste de dépendances :En savoir plus ici