私のReact
アプリケーションルートはreact-router
とreact-router-redux
で管理しています。ディスパッチ機能で何も起こらず、エラーもない
:
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'));
}
};
};
? –
@DavinTryonこのテストの結果を挿入する質問を更新しました。 ( 'logout is not defined') – Lai32290
' browserHistory.push( '/') 'を使わないのはなぜですか?あなたは 'browserHistory'を' store'と同期させているので、すべては問題ありません。 –