我有一个使用 react @0.14、redux @3.05、react-router @1.0.3 和 redux-simple-router @2.0.2 的应用程序。我正在尝试根据商店状态为我的一些路线配置 onEnter 转换。转换挂钩成功触发并将新状态推送到我的商店,这会更改 url。但是,页面上呈现的实际组件是路由匹配中的原始组件处理程序,而不是新 url 的新组件处理程序。
这是我的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>
)
}
这是我Root.js
插入 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>
)
}
}
澄清一下,如果我转到“/workouts”,它将触发 onEnter authTransition 钩子,调度 redux-simple-router 推送操作,将 url 更改为“/login”,但会在页面上显示 Workout 组件。查看 Redux DevTools 显示这state -> router -> location -> pathname
是“/login”。
状态流是
- @@在里面
- @@ROUTER/UPDATE_LOCATION(/锻炼)
- @@ROUTER/UPDATE_LOCATION (/login)
我是否错误地将商店传递到路线?我不知道为什么下一个 Router/Update_Location 不起作用