gpt4 book ai didi

javascript - React-router-dom v4,导航栏中的链接,但 App.js 中的路由

转载 作者:行者123 更新时间:2023-11-29 16:41:19 25 4
gpt4 key购买 nike

我的react-router-dom v4有问题

当我在 App.js 中单击主页/联系链接时,它运行良好,重定向到正确的路径。

但是当我单击导航栏链接(NavLink to="")时,它会更改路径但不会呈现新组件

如何强制 NavLink 在单击时重新渲染新组件?

App.js

export const App = () => {
return(
<div className="App">
<NavBar />
<div className='text-center'>
<div className='children'>
<Router>
<div className="container">
<Link to="/">Home</Link>
<Link to= "/contact">Contact</Link>
<Link to= "/terms">Terms</Link>
<Route exact path= "/" component={Home} />
<Route path= "/contact" component={Contact} />
<Route path= "/terms" component={Terms} />
</div>
</Router>
</div>

<Footer />

</div>
</div>
);}
export default App;

NavBar.js

class NavBar extends React.Component {
render () {
return (
<nav className="navbar navbar-default horizontal-navbar">
<a className="navbar-brand" href="#">
<img className='horizontal-navbar-logo' src={Job2PersonLogo} />
</a>
<div className="links-navbar-div">
<Router>
<div className="btn-nav">
<ul className="nav navbar-nav navbar-right">
<li><NavLink to="/">Add Job</NavLink></li>
<li><NavLink to= "/#search">Search</NavLink></li>
<li><a href="/#how-it-works">How It Works</a></li>
<li><NavLink to= "/sign-in">Sign In</NavLink></li>
<li><NavLink to="/sing-up">Sign Up</NavLink></li>

</ul>
</div>
</Router>
</div>
</nav>
)}}
export default NavBar;

index.js

render(<App />, document.getElementById('root'));
registerServiceWorker();

最佳答案

您有 <Router />两个实例 ,第 1 位 App.jsNavBar.js 第二名。

在这种情况下,您的应用程序中应该只有一个 Router 实例。

1 删除多余的 <Router />来自NavBar.js

NavBar.js

class NavBar extends React.Component {
render() {
return (
<nav className="navbar navbar-default horizontal-navbar">
<a className="navbar-brand" href="#">
<img className="horizontal-navbar-logo" src={Job2PersonLogo} />
</a>
<div className="links-navbar-div">
<div className="btn-nav">
<ul className="nav navbar-nav navbar-right">
<li>
<NavLink to="/">Add Job</NavLink>
</li>
<li>
<NavLink to="/#search">Search</NavLink>
</li>
<li>
<a href="/#how-it-works">How It Works</a>
</li>
<li>
<NavLink to="/sign-in">Sign In</NavLink>
</li>
<li>
<NavLink to="/sing-up">Sign Up</NavLink>
</li>
</ul>
</div>
</div>
</nav>
);
}
}

export default NavBar;

2 品牌 <Router /> App.js 的直系后代,例如:

App.js

export const App = () =>
<Router>
<div className="App">
<NavBar />
<div className="text-center">
<div className="children">
<div className="container">
<Link to="/">Home</Link>
<Link to="/contact">Contact</Link>
<Link to="/terms">Terms</Link>
<Route exact path="/" component={Home} />
<Route path="/contact" component={Contact} />
<Route path="/terms" component={Terms} />
</div>
</div>

<Footer />
</div>
</div>
</Router>;

export default App;

我根据您的代码创建了一个演示来复制此问题。当你点击里面<Articles />时你可以看到链接,<NavLink />里面<Navbar />即使浏览器中的 url 发生更改,组件也不会处于事件状态。

如果您点击 <Navbar /> 内的链接, <NavLink />处于事件状态,但内容不再在 <Articles /> 中呈现组件,因为我们有 BrowserRouter 的两个实例.

演示: https://codesandbox.io/s/lwqBO6r5

修复演示(使用一个 BrowserRouter): https://codesandbox.io/s/xkj1xKO6r

关于javascript - React-router-dom v4,导航栏中的链接,但 App.js 中的路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45504998/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com