我正在尝试做什么:
我希望以与auth flow example uses them to do page transitions 相同的方式使用onEnter挂钩,具体取决于用户是否登录了我们的。
但在我的情况下,我想使用程序的状态来管理转换,这意味着我的路由处理程序需要访问控制器视图的状态。
我做了什么:
所以我创建了一个包含路由处理程序的root.js组件 like @dan_abramov did in his flux react-router example,但我将其扩展为主控制器视图。
代码:
以下是根组件的一个简单示例,它可以访问状态,因此它可以被onEnter Hook使用。
(注意:没有看到反应路由器使用这种方式,所以我怀疑它是一种设计选择)
Root.js (包含路线的控制器视图)
import UserStore from '../stores/UserStore';
function getStateFromStores() {
return {
user: UserStore.get()
};
var Root = React.createClass({
getInitialState: function() {
return {
user: null
};
},
componentDidMount: function() {
UserStore.addChangeListener(this._onChange);
},
componentWillUnmount: function() {
UserStore.removeChangeListener(this._onChange);
},
_enterMain: function(nextState, replaceState) {
if(this.state.user.active === false){
//Do some transition logic
}
else{
//Do different transition logic
}
},
//NOTE: "this.props.user" WILL BE UNDEFINED IN "Main" COMPONENT
<Router >
<Route path='/' component={Main} onEnter={this._enterMain} user={this.state.user}>
...
</Route>
</Router>
_onChange: function() {
this.setState(getStateFromStores());
}
});
export default Root;
代码问题:
我尝试传递给路由处理程序的任何状态,因为它被传递到的组件中的prop变为未定义。
这似乎是合乎逻辑的事情,但到目前为止 - 似乎React-Router似乎不打算以这种方式使用。(这让我对使用Root.js的设计选择更加怀疑作为包含状态和路线的控制器视图。
问题:
1)将根控制器视图与路由处理程序结合起来是否可以接受?(如上面的Root.js组件)
2)onEnter Hooks是否应该访问程序状态来管理页面转换?
3)将状态为down状态传递给路由处理程序是否有效?如果是这样,我怎么能阻止道具被定义。