2017-01-05 30 views
1

私は反応ルータv3でReduxを使用しています。Redux + react-router:ルーティング傍受と控除

これは私のルーティングの設定です:

<Provider store={store}> 
    <Router history={ hashHistory }> 
    <Route path='/' component={ MainLayout }> 
     <IndexRedirect to='accounts' /> 
     <Route path='*' component={ Accounts } /> 
     <Route path='accounts' component={ Accounts } /> 
     <Route component={ SubLayout }> 
     <Route path='dashboard' component={ Dashboard }> 
      <IndexRedirect to='overview' /> 
      <Route path='overview' component={ Overview } /> 
      <Route path='scan' component={ Scan } /> 
     </Route> 
     </Route> 
    </Route> 
    </Router> 
</Provider> 

これは私が実装するロジックです:(与えられたユーザーは、ルート '/' の次の)

1)MainLayout ComponentがprofileDataを取得するためにイベントを送出します。失敗した場合は、ルートにリダイレクト成功した場合は、別のアドレス

2)に をリダイレクトする「アカウントの

3)アカウントコンポーネントは、アカウントデータを取得するために呼び出しを行います。

上記の作業は、指定されたルートが '/ accounts'の場合​​に問題があります。 1)MainLayoutはそのことを行い、プロファイルデータを取得して呼び出し元のアカウントにリダイレクトします。 BUT

2)ルータはアカウントにナビゲートして、別の電話をかけるようにします。

これを行うには良い方法がありますか?アクティブなアカウントが設定されていない場合は、基本的にアカウントページにリダイレクトしたい(店舗リミックスストアで)

答えて

1

あなたの一番の責任あるコンポーネント(あなたの場合はMainLayout)に必要なものすべてを検証し、レフィックスストアに。

正常に実行されたかどうかは、厳密に必要な場合を除いて、子コンポーネントがその検証を再度行うべきではありません。彼らは、親が彼らのためにそれをしたと期待しているので、まずストアをチェックする必要があります。

あなたがその検証の結果、あなたはあなたの子供にそれを行うことができますので、リダイレクトする必要がある場合:

browserHistory.push('/some/path'); 

リダイレクトが親を再表示されません、少なくともではない一般的なルールとして。 Reactは既にそれが新しいルートでレンダリングされなければならないことを既に知っているので、それをアンマウントしません。

+0

あなたは私の問題が何であるか理解していません。パス「/」に従っていると言います。私の主なコンポーネントは、アクションを送信し、アカウントルートにプッシュすることができます。アカウントコンポーネントはそのことを行います。しかし、ユーザーはこのルート '/ accounts'に入ることができます。今は上記と同じですが、反応ルータによってアカウントコンポーネントが再構築されます –

+0

私はあなたが何を意味しているのかは分かりますが、それが問題であるかどうかはわかりません。私は反応ルータを使用している方法に何か問題があると思う。現在、 '/ dashboard/overview'に移動すると、MainLayoutがデータを取得するための単一の呼び出しを行うことが期待されます。それは2つを作る。 2番目のイニシエータは「その他」と表示されます –

+0

何とかソースを表示できますか? –