首页 > 解决方案 > 反应更新脚本标签的内容

问题描述

我有以下脚本标签:

<script>
window.ac_vh_params = {
    containerId: 'container',
    folderName: '33/334'
};
</script>
<script src="https://somesdomain/main.js"></script>

我的目标是根据特定值更新和重新加载此脚本,因此我执行了以下操作:

import { useState, useEffect } from 'react';

const Demo = () => {
  const [selectedFolderName, setSelectedFolderName] = useState(null);

  useEffect(() => {
    if (!selectedFolderName) {
      return;
    }
    const container = document.getElementsByClassName('container')[0];
    container.innerHTML = '';
    const script1 = document.createElement('script');
    script1.text = `window.ac_vh_params = { containerId: 'container', folderName: '${selectedFolderName}' };`;
    container.appendChild(script1);
    const script2 = document.createElement('script');
    script2.src = 'https://somesdomain/main.js';
    container.appendChild(script2);
    return () => {
      container.removeChild(script1);
      container.removeChild(script2);
    }
  }, [selectedFolderName]);

  const handleClick = (e) => {
    const name = e.target.getAttribute('name') || e.currentTarget.getAttribute('name');
    setSelectedFolderName(name);
  };

  return (
    <div className="main">
      <button name="button1" onClick={handleClick}>Click 1</button>
      <button name="button2" onClick={handleClick}>Click 2</button>
      <div className="container">
      </div>
    </div>
  );
}

export default Demo;

代码按预期更改,但未重新加载新代码。我该如何解决这个问题?谢谢。

标签: reactjsscript-tag

解决方案


您是否尝试过更改 UseEffect 本身的参数?就像是

useEffect(()=>{

if (selectedFolderName) {
   window.ac_vh_params = { containerId: 'container', folderName: '${selectedFolderName}' };
    }
}
//... rest of code
)

推荐阅读