如何从redux-router添加push方法到action

时间:2017-02-16 22:57:55

标签: javascript reactjs redux redux-router

我尝试在push中添加redux-router方法。 当我初始化动作时,推送接收有效负载中的对象,但不要更改页面。 enter image description here

动作/ index.js



import { push } from 'redux-router';

export const actions = {};

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




但是,如果我不是从动作初始化push,而是直接在组件中运行正确。

MyComponent的/ 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>
        );
    }
}
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:0)

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

export const actions = {};

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

并从您的组件中将其称为actions.goTo('staff', push)

答案 1 :(得分:0)

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

注意:路由器中间件应该在Logger中间件之后。

喜欢这个:

compose(
    applyMiddleware(...middleware),
    reduxReactRouter({ createHistory })
);