Breadcrumb面包屑

    • 当系统拥有超过两级以上的层级结构时;

    • 当需要告知用户『你在哪里』时;

    • 当需要向上导航的功能时。

    基本

    最简单的用法。

    react-router@3 进行结合使用。

    1. import { Router, Route, Link, hashHistory } from 'react-router';
    2. import { Breadcrumb, Alert } from 'antd';
    3. const Apps = () => (
    4. <ul className="app-list">
    5. <li>
    6. <Link to="/apps/1">Application1</Link>:<Link to="/apps/1/detail">Detail</Link>
    7. </li>
    8. <li>
    9. <Link to="/apps/2">Application2</Link>:<Link to="/apps/2/detail">Detail</Link>
    10. </li>
    11. </ul>
    12. );
    13. const Home = ({ routes, params, children }) => (
    14. <div className="demo">
    15. <div className="demo-nav">
    16. <Link to="/">Home</Link>
    17. <Link to="/apps">Application List</Link>
    18. </div>
    19. {children || 'Home Page'}
    20. <Alert style={{ margin: '16px 0' }} message="Click the navigation above to switch:" />
    21. <Breadcrumb routes={routes} params={params} />
    22. </div>
    23. );
    24. ReactDOM.render(
    25. <Router history={hashHistory}>
    26. <Route name="home" breadcrumbName="Home" path="/" component={Home}>
    27. <Route name="apps" breadcrumbName="Application List" path="apps" component={Apps}>
    28. <Route name="app" breadcrumbName="Application:id" path=":id">
    29. <Route name="detail" breadcrumbName="Detail" path="detail" />
    30. </Route>
    31. </Route>
    32. </Route>
    33. </Router>,
    34. mountNode,
    35. );
    1. .demo {
    2. margin: 16px;
    3. }
    4. .demo-nav {
    5. height: 30px;
    6. line-height: 30px;
    7. margin-bottom: 16px;
    8. background: #f8f8f8;
    9. }
    10. .demo-nav a {
    11. line-height: 30px;
    12. }
    13. .app-list {
    14. margin-top: 16px;
    15. }

    Breadcrumb面包屑 - 图3

    分隔符

    使用 separator=">" 可以自定义分隔符。

    图标放在文字前面。

    1. import { Breadcrumb, Icon } from 'antd';
    2. <Breadcrumb>
    3. <Breadcrumb.Item href="">
    4. <Icon type="home" />
    5. </Breadcrumb.Item>
    6. <Breadcrumb.Item href="">
    7. <Icon type="user" />
    8. <span>Application List</span>
    9. </Breadcrumb.Item>
    10. <Breadcrumb.Item>Application</Breadcrumb.Item>
    11. </Breadcrumb>,
    12. mountNode,
    13. );

    Breadcrumb面包屑 - 图5

    react-router@4,或其他路由进行结合使用。

    1. import { HashRouter as Router, Route, Switch, Link, withRouter } from 'react-router-dom';
    2. import { Breadcrumb, Alert } from 'antd';
    3. const Apps = () => (
    4. <ul className="app-list">
    5. <li>
    6. <Link to="/apps/1">Application1</Link>:<Link to="/apps/1/detail">Detail</Link>
    7. </li>
    8. <li>
    9. <Link to="/apps/2">Application2</Link>:<Link to="/apps/2/detail">Detail</Link>
    10. </li>
    11. </ul>
    12. );
    13. const breadcrumbNameMap = {
    14. '/apps': 'Application List',
    15. '/apps/1': 'Application1',
    16. '/apps/2': 'Application2',
    17. '/apps/1/detail': 'Detail',
    18. '/apps/2/detail': 'Detail',
    19. };
    20. const Home = withRouter(props => {
    21. const { location } = props;
    22. const pathSnippets = location.pathname.split('/').filter(i => i);
    23. const extraBreadcrumbItems = pathSnippets.map((_, index) => {
    24. const url = `/${pathSnippets.slice(0, index + 1).join('/')}`;
    25. return (
    26. <Breadcrumb.Item key={url}>
    27. <Link to={url}>{breadcrumbNameMap[url]}</Link>
    28. </Breadcrumb.Item>
    29. );
    30. });
    31. const breadcrumbItems = [
    32. <Breadcrumb.Item key="home">
    33. <Link to="/">Home</Link>
    34. </Breadcrumb.Item>,
    35. ].concat(extraBreadcrumbItems);
    36. return (
    37. <div className="demo">
    38. <div className="demo-nav">
    39. <Link to="/apps">Application List</Link>
    40. </div>
    41. <Switch>
    42. <Route path="/apps" component={Apps} />
    43. </Switch>
    44. <Alert style={{ margin: '16px 0' }} message="Click the navigation above to switch:" />
    45. <Breadcrumb>{breadcrumbItems}</Breadcrumb>
    46. </div>
    47. );
    48. });
    49. ReactDOM.render(
    50. <Router>
    51. <Home />
    52. </Router>,
    53. mountNode,
    54. );

    带下拉菜单的面包屑

    1. import { Breadcrumb, Menu } from 'antd';
    2. const menu = (
    3. <Menu>
    4. <Menu.Item>
    5. <a target="_blank" rel="noopener noreferrer" href="http://www.alipay.com/">
    6. General
    7. </a>
    8. </Menu.Item>
    9. <Menu.Item>
    10. <a target="_blank" rel="noopener noreferrer" href="http://www.taobao.com/">
    11. Layout
    12. </a>
    13. </Menu.Item>
    14. <Menu.Item>
    15. <a target="_blank" rel="noopener noreferrer" href="http://www.tmall.com/">
    16. Navigation
    17. </a>
    18. </Menu.Item>
    19. </Menu>
    20. );
    21. ReactDOM.render(
    22. <Breadcrumb>
    23. <Breadcrumb.Item>Ant Design</Breadcrumb.Item>
    24. <Breadcrumb.Item>
    25. <a href="">Component</a>
    26. </Breadcrumb.Item>
    27. <Breadcrumb.Item overlay={menu}>
    28. <a href="">General</a>
    29. </Breadcrumb.Item>
    30. <Breadcrumb.Item>Button</Breadcrumb.Item>
    31. </Breadcrumb>,
    32. mountNode,
    33. );
    参数参数类型默认值
    href链接的目的地string-
    separator自定义的分隔符string|ReactNode'/'
    overlay下来菜单的内容 | () => Menu-
    onClick单击事件(e:MouseEvent)=>void-
    1. interface Route {
    2. path: string;
    3. breadcrumbName: string;
    4. children: Array<{
    5. path: string;
    6. breadcrumbName: string;
    7. }

    和 react-router 一起使用时,默认生成的 url 路径是带有 # 的,如果和 browserHistory 一起使用的话,你可以使用 itemRender 属性定义面包屑链接。