即使元素从页面中删除,js 代码也会继续运行。
使用 react-js
编码时的第一个困难。因为页面没有重新加载,所以初始脚本仍在运行,如 setInterval、websocket、etc
代码。下面的简单示例元素已被删除但仍在运行。如果我必须使用全局变量创建,则无效
<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,下面的代码也将正确卸载/安装等。