Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript React-从外部脚本设置组件状态_Javascript_Reactjs - Fatal编程技术网

Javascript React-从外部脚本设置组件状态

Javascript React-从外部脚本设置组件状态,javascript,reactjs,Javascript,Reactjs,我有React项目,我想向应用程序添加外部脚本: <script async src="https://geowidget.easypack24.net/js/sdk-for-javascript.js"></script> <link rel="stylesheet" href="https://geowidget.easypack24.net/css/easypack.css"/> 它正在工作,

我有React项目,我想向应用程序添加外部脚本:

<script async src="https://geowidget.easypack24.net/js/sdk-for-javascript.js"></script>
<link rel="stylesheet" href="https://geowidget.easypack24.net/css/easypack.css"/>

它正在工作,但我想在我的组件中使用函数返回值
point
(将其用作组件状态)

好的,我找到了解决方案。在函数中设置window.point,然后在组件中读取window.point

script2.innerHTML = "window.easyPackAsyncInit = function () {easyPack.init({});var map = easyPack.mapWidget('easypack-map', function (point) {window.point = point);});};";

但这是最好的解决方案吗?

选项1从另一个脚本调用:只需将
this.setState
暴露到窗口上的方法,并调用该方法将更新其状态


componentDidMount() {
  window.setPoint = (point)=>this.setState('point',point)
}

// open console and run setPoint(xxx) and check the UI change
选项2调用公开方法并从中调用,就像您所做的那样进行反应,但事情可能会更好

<script async src="https://geowidget.easypack24.net/js/sdk-for-javascript.js"></script>
<link rel="stylesheet" href="https://geowidget.easypack24.net/css/easypack.css"/>

componentDidMount() {
  window.setPoint = (point)=>this.setState('point',point)
}

// open console and run setPoint(xxx) and check the UI change
<script async src="https://geowidget.easypack24.net/js/sdk-for-javascript.js"></script>
<link rel="stylesheet" href="https://geowidget.easypack24.net/css/easypack.css"/>
componentDidMount() {
    easyPack.init({});
    var map = easyPack.mapWidget('easypack-map', (point)=>{
        console.log(point);
        this.setState('point',point)
    });