Я не согласен с вашим подходом, но найти сильфонные решение вашей проблемы:
handleBtnClick() {
actions.MyAction(this.props.history);
}
render() {
return (
<div>
<button onClick={ this.handleBtnClick.bind(this) }>My button</button>
</div>
);
}
Когда кнопка нажата функция handleBtnClick()
, и вы можете вызвать свое действие и передать любой реквизит, который вы хотите.
onClick
ожидает выражение функции (то, что оценивает выражение функции). Вы не должны делать сложные звонки там, например, actions.myAction(this.props.history)
.
Я предлагаю вам использовать react-router-redux
и обрабатывать переходы по URL-адресам, используя routeActions
и настраиваемое промежуточное ПО промежуточного уровня. Я могу расширить этот подход, если вы заинтересованы.
EDIT:
Если вы используете react-router-redux
, то вы должны воспользоваться методами в routeActions
. Метод, который вам нужен в этом случае, - push()
. Итак, если вы хотите перейти на URL-адрес /user/account, вы просто вызываете dispatch(routeActions.push('/user/account'))
, а реакция-маршрутизатор-редукция будет обрабатывать переход.
Например:
import { routeActions } from 'react-router-redux';
// Action creator
function mySuperAction(flag) {
return (dispatch, getState) => {
dispatch(routeActions->push('/user/account'));
}
});
Вы должны иметь свой магазин правильно настроена с среагировать-маршрутизатор-Redux для того, чтобы это работало.
Или из компонента:
import { routeActions } from 'react-router-redux';
import { connect } from 'react-redux';
import React from 'react';
class MyComponent extends React.Component {
handleClick() {
this.props.dispatch(routeActions.push('/user/account'));
}
render() {
return (
<div>
<button onClick={ this.handleClick.bind(this) }>My button</button>
</div>
);
}
}
export default connect()(MyComponent);
Будь осторожен со словом «среагировать», вы можете получить иск. – Leif