J'essaie de rendre les chaînes LaTeX dans un projet React. Bien que j'utilise les composants react-mathjax
React, je veux obtenir un code HTML chaîne faite à partir des chaînes LaTeX afin de la concaténer et les autres chaînes et la définir par dangerouslySetInnerHTML.
Un exemple de code est ici: https://github.com/Nyoho/test-react-project/blob/component2string/src/components/tex.jsx
aDom
vide par document.createElement('span')
(en arrière-plan. Pas dans l'arborescence DOM du document.)ReactDOM.render
Dans aDom
aDom.innerHTML
Ou .outerHTML
La valeur de aDom.innerHTML
(Ou .outerHTML
) Est "<span><span data-reactroot=\"\"></span></span>"
(Presque vide) bien que aDom
ait un arbre parfait que MathJax a généré.
Brièvement,
aDom
: ????aDom.outerHTML
: ????ne capture d'écran console.log de aDom
et aDom.outerHTML
Comment puis-je obtenir la chaîne HTML "correcte" de aDom
ci-dessus?
Cela semble fonctionner très bien si vous souhaitez rendre n'importe quel composant dans une chaîne HTML:
import { renderToString } from 'react-dom/server'
renderToString() {
return renderToString(<MyAwesomeComponent some="props" or="whatever" />)
}
D'après ce que je vois, vous obtenez ce que vous attendez.
Étant donné un élément racine (aDom
dans votre cas), ReactDOM rendra son composant racine à l'intérieur de cet élément, et l'élément de ce composant aura l'attribut data-reactroot
.
Donc, ce que vous voyez est exactement comment cela devrait être. D'après ce que j'ai testé, l'arbre de dom intérieur devrait également être là.
var Another = React.createClass({
render: function() {
return (
<div>Just to see if other components are rendered as well</div>
);
}
});
var Hello = React.createClass({
render: function() {
return (
<div id="first">
<div id="sec-1">Hello</div>
<div id="sec-2">{ this.props.name }</div>
<Another />
</div>
);
}
});
var a = document.createElement('div');
ReactDOM.render(
<Hello name = "World" /> ,
a
);
console.log(a.outerHTML);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
Le résultat dans la console est:
<div><div data-reactroot="" id="first"><div id="sec-1">Hello</div><div id="sec-2">World</div><div>Just to see if other components are rendered as well</div></div></div>