私は、react @ 0.14、redux @ 3.05、react-router @ 1.0.3、およびredux-simple-router @ 2.0.2を使用するアプリを持っています。私は店舗の状態に基づいていくつかの私のルートのonEnterの移行を設定しようとしています。移行フックが正常に起動し、新しい状態を私の店にプッシュすると、URLが変更されます。ただし、ページにレンダリングされる実際のコンポーネントは、新しいURLの新しいコンポーネントハンドラーではなく、ルート一致の元のコンポーネントハンドラーです。ここでReact RouterとReduxを使用したトランジションシンプルなルータは新しいルートのコンポーネントをレンダリングしません
それは、私のroutes.js
ファイルはここ
export default function configRoutes(store) {
const authTransition = function authTransition(location, replaceWith) {
const state = store.getState()
const user = state.user
if (!user.isAuthenticated) {
store.dispatch(routeActions.push('/login'))
}
}
return (
<Route component={App}>
<Route path="/" component={Home}/>
<Route path="/login" component={Login}/>
<Route path="/dashboard" component={Dashboard} onEnter={authTransition}/>
<Route path="/workouts" component={Workout} onEnter={authTransition}>
<IndexRoute component={WorkoutsView}/>
<Route path="/workouts/create" component={WorkoutCreate}/>
</Route>
</Route>
)
}
のように見える私は「/ワークアウト」に行けば、明確にするためにDOM
export default class Root extends React.Component {
render() {
const { store, history } = this.props
const routes = configRoutes(store)
return (
<Provider store={store}>
<div>
{isDev ? <DevTools /> : null}
<Router history={history} children={routes} />
</div>
</Provider>
)
}
}
に挿入されます私のRoot.js
コンポーネントは何かということですonEnter authTransitionフックを起動し、redux-simple-routerプッシュアクションを送出し、URLを '/ login'に変更しますが、ページにWorkoutコンポーネントを表示します。 Reduxを見るDevToolsは、state -> router -> location -> pathname
が '/ login'であることを示しています。
状態フローが
- ある@@ INIT
- @@ ROUTER/UPDATE_LOCATION(/トレーニング)
- @@ ROUTER/UPDATE_LOCATION(/ログイン)
Iパッシングアムルートへのストアは間違っていますか?なぜ次のRouter/Update_Locationが動作しないのかわかりません
あなたはあなたの輸入品を表示せず、あなたは 'プッシュ'と言いますが、 '交換'を呼び出します。どこから来ているのか少し詳しくお聞かせください。あなたがヒストリーやリアクション・ルータから使用しているヒストリーもあります。もし履歴があると仮定しても、それは明らかです。 –
replaceは、反応ルータのonEnterコールバックのパラメータです。申し訳ありませんが、輸入が必ずしも回答に関連しているとは思わなかったので、バージョン番号は質問に記載されています。 プッシュを指摘してくれてありがとう。 – Jon
これは私が解決しようとしているものに近いようです。店舗はどこから来たのですか? ...私は今それを見る... – Jome