2017-05-25 12 views
1

(+ Reduxのルータに反応):周り<Provider /> outsideまたは<Router /> outside>?通常

<Provider store={store}> 
<Router> 
    <App /> 
</Router> 
</Provider> 

なぜ、他の方法を?

<Router> 
    <Provider store={store}> 
    <App /> 
    </Provider> 
</Router> 

質問をフォローアップ:LOGIN_SUCCESSアクションが発生したときに、セットアップ認証に、我々はwindow.localStorageに返されたトークンを保存し、ページをリダイレクトする必要があります。だから私はReduxのミドルウェア内部の成功ハンドラを記述します。

const localStorageMiddleware = store => next => action => { 
    if (action.type === 'LOGIN_SUCCESS') { 
    if (!action.payload.error) { 
     window.localStorage.setItem('jwt', action.payload.token) 
    } 
    } else if (action.type === 'LOGOUT_SUCCESS') { 
    window.localStorage.setItem('jwt', '') 
    } 
    next(action) 
} 

その後、私は私がどのように行う、(私はreduxコード内locationへのアクセスを取得しようと、最初の質問をする理由です)リダイレクトを行うにhistory.pushにアクセスする必要性を感じますそうする?私はactionsファイル、ないreducersにロジックを取ると思います

// top-most line of the reducer 
import { browserHistory } from 'react-router'; 

const localStorageMiddleware = store => next => action => { 
    if (action.type === 'LOGIN_SUCCESS') { 
    if (!action.payload.error) { 
     window.localStorage.setItem('jwt', action.payload.token); 
     browserHistory.push('/'); 
    } 
    } else if (action.type === 'LOGOUT_SUCCESS') { 
    window.localStorage.setItem('jwt', '') 
    } 
    next(action) 
} 

<Provider store={store}> 
<Router> 
    <App /> 
</Router> 
</Provider> 

リダイレクト:

+0

あなたは 'react-router'のどのバージョンを使用していますか? – ickyrr

答えて

0

はこれを試してみてください。

+0

クール。ところで、ルータの周りどこにラッププロバイダ、他の方法ではない? –

+0

私は約束事なミドルウェアを使って行動を扱いますので、私は行動の中で行うことはできません。 –

+0

まだ試していません。あなたは? – ickyrr

関連する問題