2016-12-06 1 views
0

Je me demandais de je peux créer un élément de script en utilisant réagissent, quelque chose comme:ReactJS - créer élément de script

var reactScriptElement = React.createElement('script', {src: "d.js"}); 
ReactDOM.render(reactScriptElement, document.getElementById('button')); 

Mais, le script est pas géré par le navigateur. Cependant, il fait la manière native, ne semble pour l'exécuter:

var script = document.createElement('script'); 
script.src = "./d.js"; 
var div = document.getElementById('button'); 
div.appendChild(script); 

Alors, est-ce un bug, par la conception, ou quelque chose que je fais mal?

Editer: Ceci n'est pas un doublon. La question ici est la différence entre les deux, pourquoi ils n'agissent pas de la même manière.

+0

double possible de [Ajout balise de script réagisse/JSX] (http://stackoverflow.com/questions/34424845/adding-script-tag-to-react- jsx) – Chris

+0

Certainement pas. La question ici est la différence entre les deux, pourquoi ils n'agissent pas de la même manière. –

Répondre

0

Impossible de confirmer cela, mais je pense que vous devez passer un composant Réagir au lieu de l'élément de réaction. C'est pourquoi ça ne marchera pas.

class reactScriptElement extends React.Component { 
    ... 
    componentWillMount() { 
    const script = document.createElement("script"); 
    script.src = "d.js"; 
    document.body.appendChild(script); 
    } 
    ... 
} 

ReactDOM.render(reactScriptElement, document.getElementById('button')); 

Habituellement React.createElement est utilisé pour retourner de procédé render() d'un composant réagir. Votre façon de créer un élément ne fonctionnera pas parce que vous passez un élément au lieu d'un composant.

Utilisation correcte des React.createElement() -

class App extends React.Component { 
    ... 
    render() { 
    return React.createElement(MyLabel, {label: "Here is the label prop"}, 
     React.createElement("div", {}, 
     React.createElement("input", {type: "text", value: "And here is a child"}) 
    ) 
    ); 
    } 
}; 
+0

Non, les méthodes de rendu prennent un élément, et non un composant. Ne pas confondre avec le syntex JSX, car j'utilise vanila JS. –

+0

@DanielRahamim Ok. J'espère que vous trouverez la réponse. Bonne chance! – Mihir