оформить заказ (Реакция) - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть компонент Paypal, который выполняет логику при успешной оплате.

Цель состоит в том, чтобы сначала выполнить paypal/axios.post, а затем this.setState(...).

Следующий блок кода выполняет setState() перед логикой Paypalи ни один платеж не проходит:

render() {
    const onSuccess = payment => {
      axios
        .post(
          "http://compute.amazonaws.com:3000/ethhash",
          {userInput: this.props.userInput}
        )
        .then(response => console.log(response.data, payment))
            .catch(function(error) {
          console.log(error);
        });
    };

this.setState({ redirect: true });

if (this.state.redirect) {
      return <Redirect to="/FinishedPaying" userInput={this.state.userInput} />;
    }}

Если я вложу setState() в логику onSuccess или axios.post, это сломает мой (express) сервер.Как ни странно, ошибка, которую дает мне мой сервер, состоит в том, что определенная функция не является функцией ... именованная функция работает при всех других условиях.

Я ценю любую помощь, которую вы можете бросить мне, ура:)

1 Ответ

0 голосов
/ 19 декабря 2018

Во-первых, вы не должны использовать setState в функции рендеринга, вы должны переместить его в другой жизненный цикл React или вызвать вызов по запросу на основе какого-либо действия пользователя.

onPayment= async ()=>{
 const res=await axios.post("http://compute.amazonaws.com:3000/ethhash",
          {userInput: this.props.userInput}
        )
   // check here if any error if error don't set the setState.

 this.setState({redirect:true})
}
...