Der JS-Code wird auch dann weiter ausgeführt, wenn das Element von der Seite entfernt wird.
Verwenden Sie den react-js
编码时的第一个困难。因为页面没有重新加载,所以初始脚本仍在运行,如 setInterval、websocket、etc
-Code. Im folgenden einfachen Beispiel wurden die Elemente entfernt, es wird jedoch weiterhin ausgeführt. Es funktioniert nicht, wenn ich mit globalen Variablen erstellen muss
<button onclick="createNewJsCode()">create new js</button> <button onclick="removeJsCode()">remove js</button> <script> let id = '' function createNewJsCode(){ let s = document.createElement('script') let code = 'setInterval(`console.log(new Date())`,500)' s.id = (id = crypto.randomUUID()) s.appendChild(document.createTextNode(code)); document.body.appendChild(s); } function removeJsCode(){ document.getElementById(id).remove() } </script>
你不能仅仅删除
<script>
节点,你必须做一些更具体的清理。setInterval
返回一个间隔 ID,您可以将其传递给clearInterval
以停止它。一般来说,我想说你的代码在 React 上下文中没有多大意义,但在你的情况下,你可以这样做:
这是一个 React 问题,下面是在 React 组件中使用
setInterval
的示例。如果您使用某种形式的 React Router,下面的代码也将正确卸载/安装等。