Ash*_*son 8 reactjs react-router
我正在学习React并使用React-router.我正在构建的应用程序是一个移动风格的应用程序,顶部导航菜单和下面的内容部分.当我浏览应用页面时,我想在菜单栏中添加一个页面"标题",以确定您当前所在的页面.
我的路线:
<Routes>
<Route name='home' path='/' handler={HomePage}>
<Route name='product-list' path='products/' handler={ProductList}/>
<Route name='product-detail' path='product/:slug/' handler={ProductDetail} addHandlerKey={true}/>
</Route>
</Routes>
Run Code Online (Sandbox Code Playgroud)
HomePage.render:
<div className="container">
<NavigationMenu />
<div className="contents">
{this.props.activeRouteHandler()}
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
NavigationMenu.render:
<div className="navigationMenu">
<div className="navigationMenuTitle>{this.props.title}</div>
</div>
Run Code Online (Sandbox Code Playgroud)
到HomePage的子路由需要根据Ajax调用返回的内容设置其标题.
我原本想过为每条路线添加回调,将标题传递回父类,而父类又可以将这些数据传递给NavigationMenu.不幸的是,这不起作用:当您浏览页面时,重复调用的唯一函数是渲染,此处设置状态会引发Invariant Violation
错误.
我能够使用React Flux模式解决这个问题并重新组织我的应用布局.
标题组件:
var Title = React.createClass({
getInitialState: function() {
return {
title: Store.get()
};
},
componentDidMount: function () {
Store.addChangeListener(this._onChange);
},
componentWillUnmount: function() {
Store.removeChangeListener(this._onChange);
},
_onChange: function() {
this.setState({
title: Store.get()
});
},
render: function() {
return (
<span className="Title">{this.state.title}</span>
);
}
});
Run Code Online (Sandbox Code Playgroud)
页面/内容组件遵循以下结构:
var Image = React.createClass({
componentDidMount: function() {
Action.update('Image - '+ this.props.params.service);
},
render: function() {
var src = "http://place"+this.props.params.service+".com/g/400/400";
return (
<div className="Image">
<img src={src}/>
</div>
);
}
});
Run Code Online (Sandbox Code Playgroud)
这允许组件加载,动态设置标题,并在应用程序良好且准备好时仅更新标题组件!漂亮!
归档时间: |
|
查看次数: |
4485 次 |
最近记录: |