【发布时间】:2016-11-30 12:03:15
【问题描述】:
我正在使用react-router 和react-router-redux 管理我的React 申请路线。
我使用以下配置设置路由器:
import {Provider} from 'react-redux'
import {Router, browserHistory} from 'react-router'
import {createStore, combineReducers} from 'redux'
import {routerReducer} from 'react-router-redux';
import {syncHistoryWithStore} from 'react-router-redux'
import Reducers from './reducers'; // contains all my reducers,
const store = createStore(combineReducers(
{...Reducers, routerReducer}
));
const history = syncHistoryWithStore(browserHistory, store);
const AppRoute = (
<Provider store={store}>
<Router history={history}>
<Route path='login' components={PageLogin}/>
<Route path='system' components={PageSystem}>
<Route path="profile" component={PageProfile}/>
</Route>
</Router>
</Provider>
);
export default AppRoute;
当我尝试调度任何路由器功能时:
import React from 'react';
import {Link, Route} from 'react-router';
import {connect} from 'react-redux';
import {replace, push} from 'react-router-redux';
class SystemMenu extends React.Component {
constructor(props) {
super(props);
this.logout = this.logout.bind(this);
}
logout() {
this.props.logout();
}
render() {
return (
<ul className="system-menu">
<li className={this.isActual("/system/profile")}>
<Link to="/system/profile">Profile</Link>
</li>
<li className={this.isActual("/system/unit")}>
<Link to="/system/unit">Units</Link>
</li>
<li>
<button onClick={this.logout}>Logout</button>
</li>
</ul>
)
}
}
const mapStateToProps = (state) => {
return {
router: state.router,
actualPage: state.menu.actualPage
};
};
const mapDispatchToProps = (dispatch) => {
return {
logout() {
dispatch(push('/login'));
}
};
};
export default connect(mapStateToProps, mapDispatchToProps)(SystemMenu);
当我点击 que Link 组件时,页面正在发生变化,但是当我点击Logout 按钮进行调试时,正在执行dispatch(push('/login')); 行,但什么也没发生,控制台中也没有发生任何错误。
我在配置上差什么?
我在mapDispatchToProps 函数中尝试了console.log logout,并返回logout is not defined
const mapDispatchToProps = (dispatch) => {
console.log(push, logout);
return {
logout() {
dispatch(push('/login'));
}
};
};
【问题讨论】:
-
如果你在
console.log里面mapDispatchToPropslogout()函数,你看到日志了吗? -
@DavinTryon 我更新了我的问题,插入了这个测试的结果。 (
logout is not defined) -
你为什么不用
browserHistory.push('/')?您正在将browserHistory与store同步,所以一切都会好起来的 -
当然
console.log(logout)将显示logout is not defined,因为未定义注销! @DavinTryon 的意思是,将您的console.log放入logout() { ... }函数中。它被调用了吗? -
@free-soul 如果我尝试
console.log(this.props.logout);正在返回正确的函数,如果我在注销dispatch之前输入一些console.log,它也会被执行。
标签: javascript reactjs redux react-router react-router-redux