Breadcrumb 面包屑
显示当前页面在系统层级结构中的位置,并能向上返回。
何时使用
- 当系统拥有超过两级以上的层级结构时;
- 当需要告知用户『你在哪里』时;
- 当需要向上导航的功能时。
代码演示
基本
最简单的用法。
import React from 'react';
import ReactDOM from 'react-dom';
import { Breadcrumb } from 'choerodon-ui';
ReactDOM.render(
<Breadcrumb>
<Breadcrumb.Item>Home</Breadcrumb.Item>
<Breadcrumb.Item><a href="">Application Center</a></Breadcrumb.Item>
<Breadcrumb.Item><a href="">Application List</a></Breadcrumb.Item>
<Breadcrumb.Item>An Application</Breadcrumb.Item>
</Breadcrumb>,
document.getElementById('container'));
带有图标的
图标放在文字前面。
import React from 'react';
import ReactDOM from 'react-dom';
import { Breadcrumb, Icon } from 'choerodon-ui';
ReactDOM.render(
<Breadcrumb>
<Breadcrumb.Item href="">
<Icon type="home" />
</Breadcrumb.Item>
<Breadcrumb.Item href="">
<Icon type="user" />
<span>Application List</span>
</Breadcrumb.Item>
<Breadcrumb.Item>
Application
</Breadcrumb.Item>
</Breadcrumb>,
document.getElementById('container'));
其它路由
和 react-router@4
,或其他路由进行结合使用。
import React from 'react';
import ReactDOM from 'react-dom';
import {
HashRouter as Router,
Route,
Switch,
Link,
withRouter,
} from 'react-router-dom';
import { Breadcrumb, Alert } from 'choerodon-ui';
const Apps = () => (
<ul className="app-list">
<li>
<Link to="/apps/1">Application1</Link>:
<Link to="/apps/1/detail">Detail</Link>
</li>
<li>
<Link to="/apps/2">Application2</Link>:
<Link to="/apps/2/detail">Detail</Link>
</li>
</ul>
);
const breadcrumbNameMap = {
'/apps': 'Application List',
'/apps/1': 'Application1',
'/apps/2': 'Application2',
'/apps/1/detail': 'Detail',
'/apps/2/detail': 'Detail',
};
const Home = withRouter((props) => {
const { location } = props;
const pathSnippets = location.pathname.split('/').filter((i) => i);
const extraBreadcrumbItems = pathSnippets.map((_, index) => {
const url = `/${pathSnippets.slice(0, index + 1).join('/')}`;
return (
<Breadcrumb.Item key={url}>
<Link to={url}>{breadcrumbNameMap[url]}</Link>
分隔符
使用 separator=">"
可以自定义分隔符。
import React from 'react';
import ReactDOM from 'react-dom';
import { Breadcrumb } from 'choerodon-ui';
ReactDOM.render(
<Breadcrumb separator=">">
<Breadcrumb.Item>Home</Breadcrumb.Item>
<Breadcrumb.Item href="">Application Center</Breadcrumb.Item>
<Breadcrumb.Item href="">Application List</Breadcrumb.Item>
<Breadcrumb.Item>An Application</Breadcrumb.Item>
</Breadcrumb>,
document.getElementById('container'));
带下拉菜单的面包屑
面包屑支持下拉菜单。
import React from 'react';
import ReactDOM from 'react-dom';
import { Breadcrumb } from 'choerodon-ui';
const renderLink = ({listItemName}) => {
return (
<span>{listItemName}</span>
)
}
const data = [
{
href: 'https://open-hand.gitee.io/choerodon-ui',
listChildren:renderLink,
listItemName:'蔬菜',
},
{
href: 'https://open-hand.gitee.io/choerodon-ui',
listChildren:renderLink,
listItemName:'上衣',
},
{
href: 'https://open-hand.gitee.io/choerodon-ui',
listChildren:renderLink,
listItemName:'手表',
},
{
href: 'https://open-hand.gitee.io/choerodon-ui',
listChildren:renderLink,
listItemName:'外套',
},
{
href: 'https://open-hand.gitee.io/choerodon-ui',
listChildren:renderLink,
listItemName:'项链',
},
{
href: 'https://open-hand.gitee.io/choerodon-ui',
带下拉菜单的面包屑
面包屑支持下拉菜单。
import React from 'react';
import ReactDOM from 'react-dom';
import { Breadcrumb, Menu } from 'choerodon-ui';
const menu = (
<Menu className="menu-dropdown">
<Menu.Item>
<a
target="_blank"
rel="noopener noreferrer"
href="http://www.alipay.com/"
>
General
</a>
</Menu.Item>
<Menu.Item>
<a
target="_blank"
rel="noopener noreferrer"
href="http://www.taobao.com/"
>
Layout
</a>
</Menu.Item>
<Menu.Item>
<a target="_blank" rel="noopener noreferrer" href="http://www.tmall.com/">
Navigation
</a>
</Menu.Item>
</Menu>
);
ReactDOM.render(
<Breadcrumb separator=">">
<Breadcrumb.Item>首页</Breadcrumb.Item>
<Breadcrumb.Item>
<a href="">办公用品</a>
</Breadcrumb.Item>
<Breadcrumb.Item overlay={menu}>
API
参数 | 说明 | 类型 | 可选值 | 默认值 |
---|---|---|---|---|
itemRender | 自定义链接函数,和 react-router 配置使用 | (route, params, routes, paths) => ReactNode | - | |
params | 路由的参数 | object | - | |
routes | router 的路由栈信息 | object[] | - | |
separator | 分隔符自定义 | string|ReactNode | ‘/‘ |
BreadcrumbItem API
参数 | 说明 | 类型 | 可选值 | 默认值 |
---|---|---|---|---|
separator | 分隔符自定义 | ReactNode | - | |
href | 链接地址 | string | - | |
overlay | 下拉框内渲染 | object[] | - | |
dropdownProps | 下拉框的属性配置详细请查看基础组件的dropdown | DropDownProps | - | |
menuList | 配置横向下拉列表的展示 | object[] | - | |
ListProps | 当使用menulist的渲染 | object[] | - | |
onClick | 点击触发的回调函数 | (e) => {} | - |
menuList API
参数 | 说明 | 类型 | 可选值 | 默认值 |
---|---|---|---|---|
listItemName | 列表显示文字 | string | - | |
href | 链接地址 | string | - | |
listChildren | 可以获取显示文字渲染出想要的展示 | ({ listItemName, href }: { listItemName: string, href: string }) => React.ReactNode | - | |
onClick | 点击触发回调函数 | (e) => {} | - |
2.0 之后,
linkRender
和nameRender
被移除,请使用itemRender
来代替。
和 browserHistory 配合
和 react-router 一起使用时,默认生成的 url 路径是带有 #
的,如果和 browserHistory 一起使用的话,你可以使用 itemRender
属性定义面包屑链接。
import { Link } from 'react-router';
const routes = [{
path: 'index',
breadcrumbName: '首页'
}, {
path: 'first',
breadcrumbName: '一级面包屑'
}, {
path: 'second',
breadcrumbName: '当前页面'
}];
function itemRender(route, params, routes, paths) {
const last = routes.indexOf(route) === routes.length - 1;
return last ? <span>{route.breadcrumbName}</span> : <Link to={paths.join('/')}>{route.breadcrumbName}</Link>;
}
return <Breadcrumb itemRender={itemRender} routes={routes}/>;
当前内容版权归 Choerodon UI 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 Choerodon UI .