我有一个应用程序使用react @ 0.14,redux @ 3.05,react-router @ 1.0.3和redux-simple-router @ 2.0.2。我尝试根据存储状态为某些路由配置onEnter转换。转换挂钩成功触发并将新状态推送到我的商店,这会更改网址。但是,在页面上呈现的实际组件是路由匹配的原始组件处理程序,而不是新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>
)
}
}
澄清一下,如果我去&#39; / workouts&#39;,它将触发onEnter authTransition挂钩,发送redux-simple-router推送操作,将网址更改为&#39; / login&#39 ;,但会在页面上显示Workout组件。查看Redux DevTools显示state -> router -> location -> pathname
是&#39; / login&#39;。
状态流是
我是否错误地将商店送到了路线?我无法弄清楚为什么下一个Router / Update_Location无法正常工作
答案 0 :(得分:12)
原来你想使用react-router api(替换),而不是redux-simple-router来控制你的转换。
#include <systemc.h>
#include "alu.h"
#include "barrelshift.h"
int sc_main(int argc, char* argv[]){
sc_trace_file *tf;
//Signals
sc_signal <bool> enable, op, l_r;
sc_signal <sc_int<8> > a, output,b, bin;
sc_signal < sc_uint<3> > shift_amt;
//Clock
sc_clock clk("clk",10,SC_PS,0.5);
alu myALU("myALU");
barrel_shift myShifter("myShifter");
myALU.a(a);
myALU.b(b);
myALU.output(output);
myALU.op(op);
myShifter.clk(clk);
myShifter.din(bin);
myShifter.enable(enable);
myShifter.left_right(l_r);
myShifter.shift_amt(shift_amt);
myShifter.dout(b);
tf = sc_create_vcd_trace_file("trace_file");
sc_trace(tf, clk, "clk");
sc_trace(tf, a, "a");
sc_trace(tf, bin, "BarrelShifter In");
sc_trace(tf, op, "op");
sc_trace(tf, shift_amt, "shift_amt");
sc_trace(tf, l_r, "left_right");
sc_trace(tf, enable, "enable");
sc_trace(tf, b, "b");
sc_trace(tf, output, "output");
sc_close_vcd_trace_file(tf);
cout << "The result from the ALU is: " << output.read();
}
另外,要小心。我在那里看到了很多文件,用于反应路由器替换传递单个对象的地方。那就是react-router 2.0-rc *。如果您正在使用react-router 1.0,那么您将要传递替换3个单独的参数。