我会尝试这样的事情:
>使用组件的上下文来操作路由器(this.context.router.transitionTo()).
>将此方法作为参数传递给API标注.
// component.js,contextTypes: {
router: React.PropTypes.func
},componentDidMount: function() {
api.getOne(this.props.params.id,this.context.router,data) {
if (err) {
this.setErrorMessage('System Error!');
} else if (this.isMounted()) {
this.setState({
user: data
});
}
}.bind(this));
},// api.js
var endCallback = function(cb,router,res) {
if (err && err.status == 401) {
return router.transitionTo('login');
}
if (res) {
cb(err,res.body);
} else {
cb(err);
}
};
get: function(cb,router) {
request
.get(BASE_URL + resources)
.end(endCallback.bind(null,cb,router));
},
我知道你不希望在每个经过身份验证的组件上进行回调,但我认为没有任何特殊的反应路由器快捷方式可以在路由器之外进行转换.
我能想到的另一件事就是在错误上启动一个全新的路由器并手动将其发送到登录路由.但我认为这不一定有效,因为它不在初始渲染方法之内.