React JS - 如何根据 URL 路径显示/隐藏组件的某些部分?
React JS - How can I show / hide some parts of component based on URL path?
我想知道是否可以根据 URL 更改导航栏项目 而无需使用 2 个不同的导航栏组件。我的导航栏左侧有 3 个链接,右侧有 3 个链接,但我想一次显示每一侧。
例如:当我在 /page-1, /page-2, /page-3
时,我只想显示左侧,而当我在 /page-4, /page-5, /page-6
时,我想显示右侧。我尝试了一些 match.params
但没有运气。我怎样才能做到这一点?对不起我的英语
Layout.js
...
export default class Layout extends Component {
render() {
return (
<div>
<Route path="/:name" component={Navbar} />
<SomeContentComponent />
</div>
);
}
}
Navbar.js
const Navbar = ({ match }) => {
const page = match.params.name
return (
<div>
<ul className="left">
<li><Link to="/page-1">Page 1</Link></li>
<li><Link to="/page-2">Page 2</Link></li>
<li><Link to="/page-3">Page 3</Link></li>
</ul>
<ul className="right">
<li><Link to="/page-4">Page 4</Link></li>
<li><Link to="/page-5">Page 5</Link></li>
<li><Link to="/page-6">Page 6</Link></li>
</ul>
</div>
)
}
您可以像这样有条件地向左或向右渲染 div
const Navbar = ({ match }) => {
const { url } = match;
const showLeft = ['/page-1', '/page-2', '/page-3'].indexOf(url) > -1;
return (
<div>
{showLeft && (<ul className="left">
<li><Link to="/page-1">Page 1</Link></li>
<li><Link to="/page-2">Page 2</Link></li>
<li><Link to="/page-3">Page 3</Link></li>
</ul>
)}
(!showLeft && (
<ul className="right">
<li><Link to="/page-4">Page 4</Link></li>
<li><Link to="/page-5">Page 5</Link></li>
<li><Link to="/page-6">Page 6</Link></li>
</ul>
)}
</div>
)
}
<Route />
组件的目的是:根据路由有条件地呈现页面的各个部分
React 路由器,从 v3 开始,鼓励像普通组件一样使用 <Route />
而不是声明式路由模式。
有关详细信息,请查看此处:
https://reacttraining.com/react-router/web/guides/philosophy
所以基于以上,你可以这样做:
Navbar.js
import LeftNav from "./LeftNav.js";
import RightNav from "./RightNav.js";
const Navbar = () => (
<>
<Route path={['/page-1', '/page-2', '/page-3']} component={LeftNav} />
<Route path={['/page-4', '/page-5', '/page-6']} component={RightNav} />
</>
)
并且在您的左右组件中:
LeftNav.js :
export default () => (
<ul className="left">
<li><Link to="/page-1">Page 1</Link></li>
<li><Link to="/page-2">Page 2</Link></li>
<li><Link to="/page-3">Page 3</Link></li>
</ul>
)
RightNav.js :
export default () => (
<ul className="right">
<li><Link to="/page-4">Page 4</Link></li>
<li><Link to="/page-5">Page 5</Link></li>
<li><Link to="/page-6">Page 6</Link></li>
</ul>
)
更多关于<Route />
组件多路径的使用方法,请看这里:
Multiple path names for a same component in React Router
我想知道是否可以根据 URL 更改导航栏项目 而无需使用 2 个不同的导航栏组件。我的导航栏左侧有 3 个链接,右侧有 3 个链接,但我想一次显示每一侧。
例如:当我在 /page-1, /page-2, /page-3
时,我只想显示左侧,而当我在 /page-4, /page-5, /page-6
时,我想显示右侧。我尝试了一些 match.params
但没有运气。我怎样才能做到这一点?对不起我的英语
Layout.js
...
export default class Layout extends Component {
render() {
return (
<div>
<Route path="/:name" component={Navbar} />
<SomeContentComponent />
</div>
);
}
}
Navbar.js
const Navbar = ({ match }) => {
const page = match.params.name
return (
<div>
<ul className="left">
<li><Link to="/page-1">Page 1</Link></li>
<li><Link to="/page-2">Page 2</Link></li>
<li><Link to="/page-3">Page 3</Link></li>
</ul>
<ul className="right">
<li><Link to="/page-4">Page 4</Link></li>
<li><Link to="/page-5">Page 5</Link></li>
<li><Link to="/page-6">Page 6</Link></li>
</ul>
</div>
)
}
您可以像这样有条件地向左或向右渲染 div
const Navbar = ({ match }) => {
const { url } = match;
const showLeft = ['/page-1', '/page-2', '/page-3'].indexOf(url) > -1;
return (
<div>
{showLeft && (<ul className="left">
<li><Link to="/page-1">Page 1</Link></li>
<li><Link to="/page-2">Page 2</Link></li>
<li><Link to="/page-3">Page 3</Link></li>
</ul>
)}
(!showLeft && (
<ul className="right">
<li><Link to="/page-4">Page 4</Link></li>
<li><Link to="/page-5">Page 5</Link></li>
<li><Link to="/page-6">Page 6</Link></li>
</ul>
)}
</div>
)
}
<Route />
组件的目的是:根据路由有条件地呈现页面的各个部分
React 路由器,从 v3 开始,鼓励像普通组件一样使用 <Route />
而不是声明式路由模式。
有关详细信息,请查看此处:
https://reacttraining.com/react-router/web/guides/philosophy
所以基于以上,你可以这样做:
Navbar.js
import LeftNav from "./LeftNav.js";
import RightNav from "./RightNav.js";
const Navbar = () => (
<>
<Route path={['/page-1', '/page-2', '/page-3']} component={LeftNav} />
<Route path={['/page-4', '/page-5', '/page-6']} component={RightNav} />
</>
)
并且在您的左右组件中:
LeftNav.js :
export default () => (
<ul className="left">
<li><Link to="/page-1">Page 1</Link></li>
<li><Link to="/page-2">Page 2</Link></li>
<li><Link to="/page-3">Page 3</Link></li>
</ul>
)
RightNav.js :
export default () => (
<ul className="right">
<li><Link to="/page-4">Page 4</Link></li>
<li><Link to="/page-5">Page 5</Link></li>
<li><Link to="/page-6">Page 6</Link></li>
</ul>
)
更多关于<Route />
组件多路径的使用方法,请看这里:
Multiple path names for a same component in React Router