我仍然是React的新手。因此,在这里,我使用两条路径来渲染根组件:Home和About分别位于功能组件中:home.js和about.js。但是,即使在使用 exact 属性和 之后,根组件仍继续在上方进行渲染。当我重定向到任何提到的路由时,我仍然无法弄清楚如何不呈现根组件?
在此进行现场演示:https://codesandbox.io/s/vmz6zwq0k7
答案 0 :(得分:1)
当URL匹配时,Route component充当要呈现的组件的“占位符”。上面的所有东西(父母和兄弟姐妹)都不会受到影响。
给出以下代码示例:
render() {
return (
<BrowserRouter>
<div className="App">
<Link to="/home"> Home </Link>{" "}
|
<Link to="/about"> About Us </Link>{" "}
<div>
<Route exact path="/home" component={Home} />
<Route exact path="/about" component={About} />
</div>
</div>
</BrowserRouter>
);
}
这行代码:
<Route exact path="/home" component={Home} />
仅是Home
组件的“占位符”。仅当path
与"/home"
匹配时,它才呈现任何内容。
当path
匹配时,Route
组件将呈现传递的组件,在这种情况下为Home
组件。
这不会影响整个应用程序树,这是有充分理由的!
如果整个应用都将被重新渲染并替换为Home
组件,则您将失去导航链接。
答案 1 :(得分:0)
我在这里查看 react-routing 入门部分时遇到了同样的问题。 https://reactrouter.com/web/guides/quick-start
我将 Router/BrowserRouter 放在我的 App 组件中。而是像这样将路由器放在 index.js 文件中
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';
import { BrowserRouter } from "react-router-dom";
ReactDOM.render(
<React.StrictMode>
<BrowserRouter>
<App />
</BrowserRouter>
</React.StrictMode>,
document.getElementById('root')
);
然后你的应用组件看起来像这样,如果 about 或 users 匹配,根路由就不会匹配。
import React from "react";
import {
Switch,
Route,
Link
} from "react-router-dom";
export default function App() {
return (
<div>
<nav>
<ul>
<li>
<Link to="/">Home</Link>
</li>
<li>
<Link to="/about">About</Link>
</li>
<li>
<Link to="/users">Users</Link>
</li>
</ul>
</nav>
{/* A <Switch> looks through its children <Route>s and
renders the first one that matches the current URL. */}
<Switch>
<Route path="/about">
<About />
</Route>
<Route path="/users">
<Users />
</Route>
<Route path="/">
<Home />
</Route>
</Switch>
</div>
);
}
function Home() {
return <h2>Home</h2>;
}
function About() {
return <h2>About</h2>;
}
function Users() {
return <h2>Users</h2>;
}