這是完全獨立於路由器的解決方案,你可以將其與任何版本的React Router(2或3或4)或任何其他用於React的路由庫一起使用,或者完全不進行路由。您只需要指定面包屑項目及其道具的組件。然而道具和部件應符合規定 分離。BreadcrumbsItem
在組件和路由層次結構中的任何位置,都應在中介組件中指定道具。
基礎使用
const Profile = ({user}) => ( <div> <BreadcrumbsItem to=`/user/${user.login}` icon='account-box' > {user.firstName} {user.lastName} </BreadcrumbsItem> <h1> {user.firstName} {user.lastName} </h1> </div> )
安裝
npm install --save react-through react-breadcrumbs-dynamic
基礎配置
你已經使用聲明通信通過 react tree react-through?只需添加<ThroughProvider/>
到您的React組件樹的根目錄:
import {ThroughProvider} from 'react-through' const theApp = ( <ThroughProvider> <App /> </ThroughProvider> ) ReactDOM.render(theApp, document.getElementById('root'))
實例配置
在此示例中,react-router
v4 <NavLink>
用作面包屑項目:
import {Breadcrumbs} from 'react-breadcrumbs-dynamic' const Page = (props) => ( return ( <div className="App"> <Header> <Breadcrumbs separator={<b> / </b>} item={NavLink} finalItem={'b'} finalProps={{ style: {color: 'red'} }} /> </Header> {props.children} <Footer> <Breadcrumbs/> </Footer> </div> ) }
請注意,item
並且finalItem
需要react組件(類)而不是react元素。但是separator
需要反應元素。
默認情況下,項目順序基於URL長度。您可以根據需要覆蓋排序順序,只需在compare
prop中指定比較函數即可,該比較函數接收包含面包屑項prop的一對對象。例如:<Breadcrumbs compare={(a,b)=>a.weight-b.weight} removeProps={{weight: true}} />
。
如果您使用<a>
基於標簽的項目,那么您會發現將prop映射到prop 上renameProps
或 將其duplicateProps
有用,如下所示: 。to
href
<Breadcrumbs renameProps={{to:"href"}} />
將項目添加到面包屑
反應樹中的每個路由組件通常都與路由和相應的面包屑相關聯。每個組件都可以通過<BreadcrumbsItem>
使用任何道具和子項進行渲染來添加其面包屑項目。
具有面包屑項目的路由組件的示例樹:
import {BreadcrumbsItem} from 'react-breadcrumbs-dynamic' const App = (props) => ( <div> <BreadcrumbsItem to='/'>Main Page</BreadcrumbsItem> {props.children} <Route exact path="/user" component={User} /> </div> ) const User = (props) => ( <div> <BreadcrumbsItem to='/user'>Home</BreadcrumbsItem> <h2>Home</h2> {props.children} <Route exact path="/user/contacts" component={Contacts} /> </div> ) const Contacts = (props) => ( <div> <BreadcrumbsItem to='/user/contacts'>Contacts</BreadcrumbsItem> <h2>Contacts</h2> ... </div> )
您可以通過任何方向通過反應樹聲明性地傳遞帶有任何數據,函數,組件等的道具,因為 react-through 允許這樣做。
結果
上面代碼的結果將表示面包屑,如下所示:
<NavLink to='/'>Main Page</NavLink> <b> / </b> <NavLink to='/user'>Home</NavLink> <b> / </b> <b to='/user/contacts'>Contacts</b>
組成和功能
面包屑實例在實施Breadcrumbs
部件,這是through container
在以下方面 react-through。
屬性 | 類型 | 默認 | 描述 |
---|---|---|---|
separator |
元件 | undefined |
面包屑項目之間的分隔符 |
item |
零件 | a |
面包屑項目的組成部分 |
finalItem |
零件 | item 道具價值 |
最終面包屑項目的組成部分 |
finalProps |
賓語 | {} |
最終道具-將覆蓋中指定的 BreadcrumbsItem |
container |
零件 | span |
包裝器組件 |
containerProps |
賓語 | {} |
道具container 組件 |
compare |
功能 | (a,b)=> a.to.length-b.to.length | 比較功能,用於分類項目 |
hideIfEmpty |
布爾值 | false |
顯示或隱藏面包屑容器(如果存在或不存在) |
renameProps |
賓語 | {} |
將道具傳遞的道具重命名BreadcrumbsItem 為item |
duplicateProps |
賓語 | {} |
重復的道具物品傳遞BreadcrumbsItem 到item |
removeProps |
賓語 | {} |
道具不會從道具傳遞BreadcrumbsItem 到item |
該BreadcrumbsItem
組件是through agent
具有支撐力的關鍵。to
該BreadcrumbsItem
組件可能有任何道具,也可能有孩子。的每個道具BreadcrumbsItem
將傳遞到中的item
或finalItem
道具中指定的相應面包屑組件Breadcrumbs
。只有一個道具是強制性的。
屬性 | 類型 | 默認 | 描述 |
---|---|---|---|
to |
串 | 需要 | 帶URL的必填必填方位鍵 |
... |
任何 | 任何屬性-將映射到對應的面包屑項目 |
withBreadcrumbsItem()
功能
高級用法高級組件功能。它獲得一個參數與您的自定義組件的反應和返回這將有相應的組件breadcrumbs
在其道具與方法item()
,並items()
像 throughAgent
從react-through。
this.props.breadcrumbs.item()
和 this.props.breadcrumbs.items()
先進的使用方法來配置您的react組件的面包屑項目。這些方法將通過withBreadcrumbsItem
功能HOC添加到props 。該函數item()
接受一個帶有props的react組件,該函數 items()
接受帶有子代的react組件,子組件可以包含任意數量的組件以創建相應數量的面包屑項。這些功能的面包屑項目可以是任何反應組件,而只有道具才有意義。在這種情況下,Dummy
和Item
組件由庫導出。如果不再需要當前組件來表示任何面包屑項目,則每個函數都接受null以將面包屑項目重置為無。
常數
該through area
庫使用的名稱在breadcrumbsThroughArea
變量中定義 。
包含方位鍵的道具名稱在中定義 breadcrumbsBearingKey
。
import { breadcrumbsThroughArea } from 'react-breadcrumbs-dynamic' import { breadcrumbsBearingKey } from 'react-breadcrumbs-dynamic'