我使用流星與之反應,路由器和我有以下代碼:陣營,路由器通過主要和側邊欄組件之間的道具
Routes.jsx:
Meteor.startup(() => {
render(
<Router history={browserHistory}>
<Route path='/' component={App}>
<IndexRoute components={{ main: SelectTable, sidebar: MenuBar }} />
<Route path='/DisplayTable/:tableId'
components={{ main: DisplayTable, sidebar: MenuBar }} />
</Route>
<Route path='*' component={NotFound} />
</Router>,
document.getElementById('react-root'));
});
App.jsx :
export class App extends Component {
render() {
// if there's only one child logic here, irrelevant
return (
<div className='container'>
<div className="Main">
{this.props.main}
</div>
<div className="Sidebar">
{this.props.sidebar}
</div>
</div>);
}
}
我DisplayTable分量聽s到流星訂閱數據庫,並最終獲得這些屬性:
DisplayTable.propTypes = {
tableId: PropTypes.string.isRequired,
loading: PropTypes.bool.isRequired,
rows: PropTypes.array.isRequired,
cols: PropTypes.array.isRequired,
user: PropTypes.object,
};
而且我菜單欄組件呈現這樣的:
<li><InsertRow tableId={this.props.params.tableId}/></li>
凡的InsertRow具有這些屬性
InsertRow.propTypes = {
rows: PropTypes.array,
tableId: PropTypes.string,
};
其中InsertRow
和的行屬性完全一樣。
如何將屬性從主要組件傳遞到側邊欄,以便我可以將它傳遞給組件?
- 也許一些與
React.cloneElement
雖然我是不是真的能夠環繞一個我的頭... - 我看了所有的
main
和sidebar
的屬性,似乎我不能找到有用的東西......
變通:
- 我理論上可以訂閱,並再次得到數據,因爲我有個e
tableId
,但這似乎過於愚蠢,因爲這兩個組件在字面上呈現在相同的路線。 - 我也可以在
MenuBar
上做一個假div,並在我顯示錶格時使用jQuery替換它,但這似乎很不反應。 - 我也可以爲我的DisplayTable部分應用創建另一個菜單,但我試圖避免混亂。
(我不使用反應路由器4.0如果與自己相關的答案,使用3.0.5,流星的最新版本,但我想這是不是與此有關)
編輯:我想我會在路徑上添加容器,以便我已經有了數據。儘管我會在這裏留下這個以防某人有更好的建議,但這種分類很有意義。