Oui il y a une différence!
L'effet immédiat de l'utilisation de innerHTML
contre dangerouslySetInnerHTML
est identique -- le nœud DOM sera mise à jour avec l'injection de HTML.
Cependant, en arrière-plan lorsque vous utilisez dangerouslySetInnerHTML
il vous permet de Réagir savoir que le code HTML à l'intérieur de ce composant n'est pas quelque chose dont il se soucie.
Parce que Réagir utilise un virtuel DOM, quand il s'agit de comparer les diff contre le DOM, il peut directement en haut de contourner le contrôle des enfants de ce nœud , car il sait que le HTML est à venir à partir d'une autre source. Donc, il y a des gains de performances.
Plus important encore, si vous utilisez simplement innerHTML
, de Réagir a aucun moyen de connaître le nœud DOM a été modifié. La prochaine fois que l' render
fonction est appelée, Réagir écrasera le contenu qui a été injecté manuellement avec ce qu'il croit être le bon état de ce nœud DOM devrait être.
Votre solution pour utiliser componentDidUpdate
de toujours s'assurer que le contenu est synchronisé je pense pourrait fonctionner, mais il pourrait y avoir un flash au cours de chaque rendu.