React router 3.x.x同时触发<router>内的所有onEnter

时间:2017-05-18 20:08:08

标签: javascript reactjs react-router

我在App.js中设置了路由,调用了一些Auth函数来检查JWT令牌的验证。所有的代码都可以工作,但是我的用户经过了身份验证,但是当我点击页面时,所有的onEnter函数似乎都会被触发。而不仅仅是我实际访问的路线。使用react-router v3.x.x

console.log现在返回

  

&#39;做auth&#39;

两次。如果我添加一个新路由并连接onEnter函数,它会触发三次。取出一个,开火一次。

我完全不知道从哪里开始解决这个问题,所以任何建议都会非常感激!

class App extends Component {

    doAuth(authData) {
        console.log('doing auth');
    }

    render() {              
        return (
            <Router history={browserHistory}>
                <Route  
                        path="/" 
                        component={ AuthContainer } 
                />
                <Route 
                        path="/dashboard"    
                        component={ DashboardContainer }    
                        onEnter={this.doAuth({socket: this.socket, role: ['admin']})} 
                />
                <Route 
                        path="/digital-sign" 
                        component={ DigitalSignContainer }
                        onEnter={this.doAuth({socket: this.socket, role: ['admin', 'editor']})} 
                />
            </Router>
        );
    }
}

1 个答案:

答案 0 :(得分:1)

路由器触发所有onEnter,因为它需要传递回调,而不是回调结果值。

例如,以这种方式:onEnter={() => this.doAuth({socket: this.socket, role: ['admin']})}