2016-12-06 75 views
0

我想知道,我可以用创建一个脚本元素反应,是这样的:ReactJS - 创建脚本元素

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

但是,剧本不是由浏览器中运行。然而,这样做的土办法,也似乎运行它:所以

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

,它是一个错误,通过设计,或者说我做错了吗?

编辑:这不是重复的。这里的问题是两者之间的差异,为什么他们的表现不一样。

+0

的可能的复制[添加脚本标记反应/ JSX](http://stackoverflow.com/questions/34424845/adding-script-tag-to-react- jsx) – Chris

+0

Definietly不是。这里的问题是两者之间的差异,为什么他们的表现不一样。 –

回答

0

无法证实这一点,但我认为你需要传递一个React组件而不是react元素。这就是为什么它不起作用。

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')); 

通常React.createElement用于从render()返回反应组件的方法。您创建元素的方式将无法工作,因为您传递的是元素而不是组件。

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

不,渲染方法需要一个元素,而不是一个组件。 不要与JSX syntex混淆,因为我使用的是vanila JS。 –

+0

@DanielRahamim好的。希望你找到答案。祝你好运! – Mihir