Faire une chaîne HTML Réagir à partir d'un composant dans le fond, comment utiliser la chaîne de caractères par dangerouslySetInnerHTML dans un autre composant Réagir
J'essaie de rendre le LaTeX des chaînes dans un projet React.
Bien que j'utilise le react-mathjax
Réagir composants, je veux obtenir une chaîne HTML faits à partir du LaTeX de chaînes afin de concaténer et les autres chaînes et de le définir par dangerouslySetInnerHTML.
Mon code, j'ai essayé
Exemple de code est ici: https://github.com/Nyoho/test-react-project/blob/component2string/src/components/tex.jsx
- LaTeX chaînes sont donnés comme des chaînes
- Faire un vide DOM
aDom
pardocument.createElement('span')
(en arrière-plan. pas dans le document arborescence DOM.) - Rendre un LaTeX string par
ReactDOM.render
enaDom
- Après le rendu, obtenir une chaîne de caractères par
aDom.innerHTML
ou.outerHTML
Problème
La valeur de aDom.innerHTML
(ou .outerHTML
) est "<span><span data-reactroot=\"\"></span></span>"
(presque vide)
bien que aDom
a un arbre parfait que MathJax généré.
Brièvement,
aDom
: 🙆aDom.outerHTML
: 🙅
Une capture d'écran de la console.journal de aDom
et aDom.outerHTML
Question
Comment puis-je obtenir les "bons" HTML chaîne de aDom
ci-dessus?
Vous devez vous connecter pour publier un commentaire.
Cela semble fonctionner très bien si vous souhaitez vous rendre n'importe quel composant d'une chaîne HTML:
renderToString
dans renderToString branche: github.com/NyohoSampleCodes/test-react-project/blob/..., Mais il semble être encore vide.De ce que je vois, vous obtenez ce que vous vous attendez à obtenir.
Donné un élément racine (
aDom
dans votre cas), ReactDOM rendra la racine du composant à l'intérieur de cet élément, et ce composant de l'élément ayant l'attributdata-reactroot
.Donc ce que vous voyez est exactement la façon dont il devrait être. De ce que j'ai testé, l'intérieur des dom de l'arbre devrait être là aussi.
JS:
HTML:
Le résultat dans la console est:
react-mathjax
?console.log(c)
au début decomponentToString
fonction?console.log(c)
dans la ligne 1 decomponentToString
fonction, j'ai imgur.com/6Q9sjNm (Il me semble être un Réagir élément.)display: none
) et le rendu de votre composante. Vous devriez obtenir la totalité du contenu.script
tag est fait par le navigateur lorsque ce script est présent dans les DOM. Lors du rendu de laMathJax
en mémoire danscomponentToString
, la balise script est inséré, mais il n'est pas exécuté comme il n'a pas atteint le navigateur DOM, de sorte que le texte n'est pas présent. En général, il est considéré comme une mauvaise pratique d'avoirscript
balises à l'intérieur de réagir composants.