在React中重新请求脚本修改全局变量不生效,但是在控制台手动请求就生效是怎么回事?

我在项目中的登陆页的componentDidMount中将window._vds设置成初始值,然后想把已经加载进来的脚本去掉,(之前登录进系统之后会有加载进来的js文件)然后重新加载,按理说,那个重新加载进来的js文件会将window._vds处理成一个其它的对象,但是我这段代码执行过后并没有使window._vds变成想要的对象结果。它还是一个初始定义的数组:

componentDidMount() {
    // 给growingIO设置初始值
    const script = document.getElementById('vds');
    if (script) {
      window._vds = [['setAccountId', 'xxx']];
      script.parentNode.removeChild(script);
      var vds = document.createElement('script');
      vds.type = 'text/javascript';
      vds.async = true;
      vds.id = 'vds';
      vds.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'dn-growing.qbox.me/vds.js';
      var s = document.getElementsByTagName('script')[0];
      s.parentNode.insertBefore(vds, s);
    }
  }

图片描述

但是如果在控制台中手动执行一下下面代码中的内容:

window._vds = [['setAccountId', 'xxx']];
const script = document.getElementById('vds');
if (script) {
  script.parentNode.removeChild(script);
  var vds = document.createElement('script');
  vds.type = 'text/javascript';
  vds.async = true;
  vds.id = 'vds';
  vds.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + 'dn-growing.qbox.me/vds.js';
  var s = document.getElementsByTagName('script')[0];
  s.parentNode.insertBefore(vds, s);
}

这个window._vds就如愿变成了对象,可能是怎么回事呢?

图片描述

阅读 3k
1 个回答

只是script标签换了一下,没有真正请求那个js

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题