2

我正在尝试push从操作中添加方法redux-router。当我启动操作时,推送接收有效负载中的对象,但不要更改页面。 在此处输入图像描述

动作/index.js

import { push } from 'redux-router';

export const actions = {};

actions.goTo = () => {
    return (dispatch) => {
        dispatch(push('/staff'));
    };
};

但是,如果我push不是从动作中初始化,而是直接在组件中初始化,它就可以正常工作。

我的组件/index.js

import { push } from 'redux-router';
import { connect } from 'react-redux';

@connect((state) => ({}))
export default class MyComponent extends Component {

constructor (props) {
        super(props);
        this._goTo = ::this._goTo;
    }
    
_goTo (event) {
        event.preventDefault();
        const { dispatch } = this.props;
        dispatch(push('/staff'));
    }
    
    render () {
        return (
            <section>
              <button onClick = { this._goTo }>from component</button>
            </section>
        );
    }
}

4

2 回答 2

0

因此,push()可能只能在连接的组件内部工作。如果你想从你的actions/index.js文件中使用它,你可以将它作为一个参数传递并在那里调用它,而不必导入它。你可以有类似的东西:

export const actions = {};

actions.goTo = (route, push) => {
    return () => {
        push(`/${route}`);
    };
};

actions.goTo('staff', push)从您的组件中调用它。

于 2017-02-17T01:56:22.653 回答
0

编写中间件时可能会出错。

注意: Router 中间件应该在 Logger 中间件之后。

像这个:

compose(
    applyMiddleware(...middleware),
    reduxReactRouter({ createHistory })
);
于 2017-02-18T20:10:54.807 回答