import React, { cloneElement } from 'react'; const BreadcrumbItem = React.createClass({ getDefaultProps() { return { prefixCls: 'ant-breadcrumb', separator: '/', }; }, propTypes: { prefixCls: React.PropTypes.string, separator: React.PropTypes.oneOfType([ React.PropTypes.string, React.PropTypes.element, ]), href: React.PropTypes.string, }, render() { const { prefixCls, separator, children } = this.props; let link = {children}; if (typeof this.props.href === 'undefined') { link = {children}; } return ( {link} {separator} ); } }); const Breadcrumb = React.createClass({ getDefaultProps() { return { prefixCls: 'ant-breadcrumb', separator: '/', }; }, propTypes: { prefixCls: React.PropTypes.string, separator: React.PropTypes.oneOfType([ React.PropTypes.string, React.PropTypes.element, ]), routes: React.PropTypes.array, params: React.PropTypes.object, }, render() { let crumbs; const { separator, prefixCls, routes, params, children } = this.props; if (routes && routes.length > 0) { const paths = []; crumbs = routes.map((route, i) => { if (!route.breadcrumbName) { return null; } const name = route.breadcrumbName.replace(/\:(.*)/g, (replacement, key) => { return params[key] || replacement; }); let link; let path = route.path.replace(/^\//, ''); Object.keys(params).forEach(key => { path = path.replace(`:${key}`, params[key]); }); if (path) { paths.push(path); } if (i === routes.length - 1) { link = {name}; } else { link = {name}; } return {link}; }); } else { crumbs = React.Children.map(children, (element, index) => { return cloneElement(element, { separator, key: index, }); }); } return (
{crumbs}
); } }); Breadcrumb.Item = BreadcrumbItem; export default Breadcrumb;