React / React-Router:使用包含路径的Controller-View进行onEnter转换

时间:2015-12-10 16:26:17

标签: routing reactjs react-router flux

我正在尝试做什么:

我希望以与auth flow example uses them to do page transitions 相同的方式使用onEnter挂钩,具体取决于用户是否登录了我们的。

但在我的情况下,我想使用程序的状态来管理转换,这意味着我的路由处理程序需要访问控制器视图的状态。

我做了什么:

所以我创建了一个包含路由处理程序的root.js组件 like @dan_abramov did in his flux react-router example,但我将其扩展为主控制器视图。

这样可以在onEnter挂钩期间检查状态,以根据程序状态管理特殊转换。

代码:

以下是根组件的一个简单示例,它可以访问状态,因此它可以被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状态传递给路由处理程序是否有效?如果是这样,我怎么能阻止道具被定义。

0 个答案:

没有答案