首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据URL路径显示/隐藏组件的某些部分?

如何根据URL路径显示/隐藏组件的某些部分?
EN

Stack Overflow用户
提问于 2020-01-22 19:03:16
回答 2查看 1.2K关注 0票数 2

我想知道我是否可以根据URL更改导航条项,而不需要2个不同的组件。我的肚脐在左边有3个链接,在右边有3个链接,但是我想每次显示每一侧一次。

当我在/page-1, /page-2, /page-3时,我只想显示左边,当我在/page-4, /page-5, /page-6上显示右侧时。我试过一些match.params的东西,但没有运气。我怎样才能做到这一点?对不起我的英语

Layout.js

代码语言:javascript
复制
...

export default class Layout extends Component {
  render() {
    return (
      <div>
        <Route path="/:name" component={Navbar} />
        <SomeContentComponent />
      </div>
    );
  }
}

Navbar.js

代码语言:javascript
复制
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>
  )
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-22 19:10:26

您可以这样有条件地渲染左或右div。

代码语言:javascript
复制
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>
  )
}

票数 2
EN

Stack Overflow用户

发布于 2020-01-22 19:24:22

<Route />组件的用途是:根据路由有条件地呈现页面的部分。

从v3开始,React路由器鼓励像普通组件一样使用<Route />,而不是声明性路由模式。有关更多细节,请看这里:https://reacttraining.com/react-router/web/guides/philosophy

基于上述,你可以这样做:

Navbar.js

代码语言:javascript
复制
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 :

代码语言:javascript
复制
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 :

代码语言:javascript
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59866628

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档