我尝试将标记添加到react中,但componentDidMount始终在render之前运行。如何将脚本添加到一起并一起运行。


 componentDidMount(){
 function loadScript(){
 var script = document.createElement('script');
 script.type ='text / javascript';
 script.textContent ='var Module = {TOTAL_MEMORY:536870912,errorhandler:null,compatibilitycheck:null,dataUrl:“Release / Arctopia_Path_Monopoly_v1.1.1GL.data”,codeUrl:“Release / Arctopia_Path_Monopoly_v1.1.1GL.js”,memUrl:“发布/ Arctopia_Path_Monopoly_v1.1.1GL.mem”};';
的document.getElementById( “播放”)的appendChild(脚本);

 var script0 = document.createElement('script');
 script0.type ='text / javascript';
 script0.src ='TemplateData / UnityProgress.js';
的document.getElementById( “播放”)的appendChild(script0);

 var script2 = document.createElement('script');
 script2.src ='Release / UnityLoader.js';
的document.getElementById( “播放”)的appendChild(SCRIPT2);
 }
 loadScript();
 this.setState({update:true})
 console.log(“插入脚本”)
},

 render(){
 return(
< div id =“wrapperOthers”>
< div className =“container text-xs-center”id =“play”>
< h4> {this .data.colCourse.name}< / h4>
< canvas id =“canvas”oncontextmenu =“event.preventDefault()”height =“600px”width =“960px”>< / canvas> 
< / div>
< / div>
)
}



答案 0 :(得分:0)
我建议将此脚本创建为单独的js文件并导入/要求它(因为您使用的是JSX我假设您使用的是ES6,所以我将在ES6中编写示例)。然后你只能保留this.setState({ update: true })
并在条件{this.state.update? importedScript:null}
整个代码可能如下所示:
/*At the very top of your file*/
import importedScript from '../path to the file'
componentDidMount () {
this.setState({ update: true })
console.log("insert script")
},
render () {
return (
<div id="wrapperOthers">
<div className="container text-xs-center" id="play">
{ this.state.update ? importedScript: null }
<h4>{ this.data.colCourse.name }</h4>
<canvas id="canvas" oncontextmenu="event.preventDefault()" height="600px" width="960px"></canvas>
</div>
</div>
)
}
您不需要任何子代附加,脚本creartion等。您的代码将更加整洁,它可以帮助解决您的问题。