2016-12-06 40 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