Добрый день!
Есть компонента с формами и компонента кнопка (
Button). Эта кнопка принимает параметр куда нужно редиректить человека после клика, но вот проблема теперь при клике на кнопку мне нужно сначала отправить запрос, через промисы получить ответ и только после успешного ответа делать редирект.
Вопросы:- Как моей функции передать параметры из хранилища?
- Как в экшену, который диспатчит изменения вернуть промис для того чтобы он понимал когда редиректить?
Страница/* Дополнительная информация для совершения платежа */
import React from 'react';
import { connect } from 'react-redux';
import PropTypes from 'prop-types';
import {
childrenWhiteContentStyle, contentUpStyle, payBtnContainerStyle,
} from '../../styles/GlobalStyle';
import TextFieldLabel from '../forms/TextFieldLabel';
import { choosePayment } from '../routing/Paths';
import Button from '../forms/Button';
const AdditionalPaymentInformation = ({
fio, onSetFio,
phone, onSetPhone,
isBigPayment, onChange,
}) => (
<div className={childrenWhiteContentStyle}>
<div className={contentUpStyle}>
<TextFieldLabel
type="tel"
value={phone}
onChange={onSetPhone}
label={isBigPayment ? 'Мобильный телефон' : 'Введите номер мобильного телефона'}
mask="+9 (999) 999-99-99"
placeholder="+7"
helper={isBigPayment ? 'Укажите номер телефона, чтобы перейти к оплате' : 'Специалист службы поддержки свяжется с вами, если возникнут сложности с проведением оплаты'}
/>
</div>
<div className={payBtnContainerStyle}>
<Button
value="Продолжить"
to={choosePayment}
onChange={() => onChange(fio, phone)}
/>
</div>
</div>
);
AdditionalPaymentInformation.propTypes = {
phone: PropTypes.string.isRequired,
onSetPhone: PropTypes.func.isRequired,
onChange: PropTypes.func.isRequired,
};
export default connect(
state => ({
phone: state.additionalPaymentInformation.phone,
}),
dispatch => ({
onSetPhone: (event) => {
dispatch({ type: 'SET_ADD_PAY_PHONE', payload: event.target.value });
},
onChange: (fio, phone) => {
console.log(fio, phone);
// dispatch({ type: 'SET_ADD_PAY_PHONE', payload: '' });
},
}),
)(AdditionalPaymentInformation);
Buttonimport React from 'react';
import { withRouter } from 'react-router-dom';
import PropTypes from 'prop-types';
import { payBtnStyle, iconBtnStyle } from '../../styles/GlobalStyle';
import payIcon from '../../img/button/icon-pay.svg';
import disabledPayIcon from '../../img/button/icon-pay-disabled.svg';
const Button = withRouter(({
history, value, to, icon, disabled,
}) => {
const redirectTo = () => {
history.push(to);
};
return (
<button
type="button"
className={payBtnStyle}
onClick={redirectTo}
disabled={disabled}
>
{icon === 'pay' && (
<img src={disabled ? disabledPayIcon : payIcon} alt="" className={iconBtnStyle} />
)}
{value}
</button>
);
});
Button.propTypes = {
value: PropTypes.string.isRequired,
to: PropTypes.string.isRequired,
icon: PropTypes.string,
disabled: PropTypes.bool,
onChange: PropTypes.func,
};
export default (Button);