正确应用javascript

正确应用javascript,javascript,html,reactjs,twitter-bootstrap,Javascript,Html,Reactjs,Twitter Bootstrap,我有3页带引导模板的JS应用程序。我使用react路由器处理页面转换。 因此,我有一个index.js文件,其中包含以下内容: function App() { return( <Router> <Switch> <Route path="/page1/"> <Page1 /> </Route> &l

我有3页带引导模板的JS应用程序。我使用react路由器处理页面转换。 因此,我有一个index.js文件,其中包含以下内容:

function App() {
   return(
      <Router>
        <Switch>
          <Route path="/page1/">
            <Page1 />
          </Route>
          <Route path="/page2">
            <Page2 />
          </Route>
          <Route path="/">
            <Home />
          </Route>
        </Switch>
      </Router>
    );
}
我做错什么了吗

编辑

我意识到我忘了添加一个重要的细节。我删除了组件中的useEffect和对window.applyEffects()的调用,页面呈现出我所期望的没有效果的效果。如果我从开发人员控制台调用window.applyEffects(),一切正常。我想我应该在页面完全呈现后找到调用js函数的方法。这可行吗

已解决

我要感谢每一位回复我并在正确方向上帮助我的人。我通过更新useEffect钩子解决了这个问题,如下所示:

useEffect(() => {
  const script = document.createElement('script');

  script.src = `${window.location.origin}/js/effects.js`;
  script.async = true;

  document.body.appendChild(script);

  return () => {
    document.body.removeChild(script);
  }
});
我在js文件夹中创建了一个名为effects.js的文件,每次加载组件时,我都会将其附加到dom中来加载它。。。我还记得把它和退货一起拿走。我把这个放在这里,希望它能在将来帮助我同样处境的人!
谢谢你的社区

似乎您只想在每次重新加载页面时运行一段代码,查看我找到的代码


它似乎就是您要寻找的。

我看到您正在代码中使用
窗口
对象。也许这就是你问题的根源。官方文件上说:

窗口对象窗口对象表示窗口中打开的窗口 浏览器

如果文档包含框架(标记),浏览器将创建一个框架 HTML文档的窗口对象,以及一个附加窗口对象 对于每个帧

…哪种情况表明一旦浏览器中的窗口打开,它就会触发,因此我不确定一旦刷新页面,它是否会重新触发。使用
useffect
钩子应该在页面刷新时触发任何内容,因为它再次装载组件


我建议您研究一下如何使用
窗口。applyEffects()

我在另一个答案上贴了一条类似的评论,说明了同样的问题,但我猜那个人删除了他的答案。
useffect
钩子将以无数组依赖的无限外观启动,从而启动内部函数。然而,情况似乎并非如此,我怀疑他没有正确使用
窗口
对象。请尝试在依赖项数组中添加窗口,如useffect(()=>{window.applyEffects();},[window]),甚至window.applyEffects,因为我编辑了我的回答谢谢你的评论,我尝试在依赖项数组中添加窗口,但在浏览器控制台中出现以下错误:React Hook useEffect具有不必要的依赖项:“窗口”。排除它或删除依赖项数组。像“window”这样的外部作用域值不是有效的依赖项,因为变异它们不会重新呈现组件,即使我在数组中添加window.applyEffects,我也会得到相同的效果…是的,没有理由向React依赖项数组添加任何全局变量,包括
window
本身。是的,你是完全正确的…谢谢你的帮助,我修复了它并用解决方案更新了最初的问题
useEffect(() => {
  const script = document.createElement('script');

  script.src = `${window.location.origin}/js/effects.js`;
  script.async = true;

  document.body.appendChild(script);

  return () => {
    document.body.removeChild(script);
  }
});