我正在寻求有关我的 react 路由器 onEnter Prop 的帮助。似乎 onEnter Prop 在我的应用程序中的每个组件上触发,尽管我没有指定事件。
很确定这与我的路由器设置有关。

我的代码:

<Provider store={store}>
<Router history={browserHistory}>
  <Route path="/" component={App}>
    <Route
      path="/1"
      components={{ main: Hierarchy, sidebar: NavBar }}
      onEnter={AWSApi.tokenIsValid(authHeader)}
    />
    <Route
      path="/2"
      components={{ main: Entities, sidebar: NavBar }}
      onEnter={AWSApi.tokenIsValid(authHeader)}
    />
    <Route
      path="/2/:id"
      component={Analysis}
      onEnter={AWSApi.tokenIsValid(authHeader)}
    />
    <Route path="/1/:id" component={Entity} onEnter={AWSApi.tokenIsValid(authHeader)} />
  </Route>
  <Route path="/login" component={AuthForm} />
  <Route path="/new-password" component={ChangePasswordForm} />
</Router>

最佳答案

编辑: 实际上 @bennygenel 发现了您在每条路线上进行身份验证时遇到的问题。但是您的路由还有另一个问题,我将在下面介绍:

您定义路由的顺序有问题。

例如,如果您访问 /login 路由将满足 <Route path="/" /> 并输入。同样,访问 /1/ABC 将满足 <Route path="/1" /> 并输入。通常,您应该先定义更严格/更具体的路由,然后才是更通用的路由。

你应该像这样定义它们:

<Router history={browserHistory}>
  <Route path="/login" component={AuthForm} />
  <Route path="/new-password" component={ChangePasswordForm} />
  <Route path="/" component={App}>
    <Route path="/1/:id" component={Entity} onEnter={() => AWSApi.tokenIsValid(authHeader)} />
    <Route
      path="/1"
      components={{ main: Hierarchy, sidebar: NavBar }}
      onEnter={() => AWSApi.tokenIsValid(authHeader)}
    />
    <Route
      path="/2/:id"
      component={Analysis}
      onEnter={() => AWSApi.tokenIsValid(authHeader)}
    />
    <Route
      path="/2"
      components={{ main: Entities, sidebar: NavBar }}
      onEnter={() => AWSApi.tokenIsValid(authHeader)}
    />
  </Route>
</Router>

您应该从官方文档中查看 the Precedence section :

关于reactjs - onEnter 属性在所有组件上触发,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46277940/

10-16 10:44