【发布时间】:2022-01-28 20:18:42
【问题描述】:
我正在开发一个 React 应用程序。 (反应 17.02,
发生的情况是,每次我单击页面上的链接时,它都会从 index.js 开始重新加载整个应用程序。
这是我的App.js 文件:
return (
<>
<Router>
<Suspense fallback={<div>Loading...</div>}>
<Header />
<Switch>
<Route path='/privacy' exact component={Privacy} />
<Route path='/about' exact component={About} />
<Route path='/nick' exact component={Wines} />
<Route path='/home' exact component={Home} />
<Route path='/' exact component={Home} />
<Route component={Err404} />
</Switch>
{window.location.href.indexOf("/nick") === -1 ? <Footer /> : <></>}
</Suspense>
</Router>
<CookiesDeclaration />
</>
);
}
我实现了一个登录组件,并将其放入我的Header:
<Nav className="main-header">
<Nav.Link" href="/">Home</Nav.Link>
<Nav.Link" href="/about">about</Nav.Link>
<Nav.Link" href="mailto:info@example.com">Contact")}</Nav.Link>
<Login />
</Nav>
页脚也更容易:
<div className="footer_container">
<Nav className="main-header">
<Nav.Link href="/privacy">Privacy terms</Nav.Link>
<Nav.Link href="/terminiDiServizio">Termini di servizio</Nav.Link>
</Nav>
</div>
所以,有一个header、一个footer 和页面的其余部分。
通常,单击其中一个链接,页面应该简单地显示在页眉和页脚之间,仅更改单个路由的内容。
但它会重新加载所有页面。
我从未注意到这种行为,因为我没有与会话相关的信息。
然后,我添加了登录组件reactjs-social-login,它运行得非常好。
但是,在用户登录后,如果我点击任何链接,则重新加载整个 index.js 页面,然后是 App.js 页面,从头开始重新启动所有页面,并且登录丢失,因为@987654329 @ 组件又包含包含所有登录信息的Login 组件,也被重新加载,所有状态信息都丢失了。
凭我的聪明才智,我确信 React 只是通过路由器重新加载了与所选路由对应的页面,其行为类似于我们在 JQuery 中使用的行为,仅重新加载页面的一部分。
您能帮我找出问题所在以及如何解决吗?
应用解决方案后的新通知
建议的解决方案演示在Header 和Footer 页面上运行。
但是,当我试图将它应用到我的主页时,我有一个非常奇怪的行为:
在我的主页中间有一个按钮,带有一个链接:
原始版本带有<a /> 标签,显然出现了与上述相同的问题。所以我按照建议将其更改为<Link />。
代码如下:
<Link to="/nick" >
<div className="hoverable" style={{
backgroundColor: "#00AC4E", borderRadius: "15px", width: "300px", height: "40px",
fontWeight: "bolder", marginTop: "20px",
display: "flex", justifyContent: "space-around", alignItems: "center", fontSize: "24px"
}}>
<span style={{ backgroundColor: "transparent", color: "#F3EED9" }}>{t(`misc.tryNick`)}</span>
</div>
</Link>
结果是主页完全重新加载,
虽然使用这段更简单的代码,但它可以按预期顺利运行:
<Link to="/nick" >{t(`misc.tryNick`)}</Link>
有人能解释为什么吗?这应该是一个简单的样式问题,中间有一个 div!
【问题讨论】:
标签: reactjs react-router react-cookie