Перехватчики React работают только в функциональных компонентах.
Только перехватчики вызовов из функций реагирования
Они не работают в компонентах на основе классов.
Только вызывать перехватчики на верхнем уровне
Не вызывать перехватчики внутри циклов, условий или вложенных функций. Вместо этого всегда используйте перехватчики в верхний уровень вашей функции React.
Не может быть определено useState
и useElements
в обратном вызове handleStripe
.
Преобразование / коэффициент логики c в небольшой функциональный компонент. Переместите крючки в корпус основной функции.
import React from "react";
import {
Elements,
useStripe,
useElements,
CardElement,
} from "@stripe/react-stripe-js";
import { stripePromise } from "../../config/stripe";
const StripeComponent = props => {
const stripe = useStripe();
const elements = useElements();
const handleStripe = async (event) => {
event.preventDefault();
console.log("event", event);
const { error, paymentMethod } = await stripe.createPaymentMethod({
type: "card",
card: elements.getElement(CardElement),
});
// do something with error or paymentMethod?
};
return (
<Elements stripe={stripePromise}>
<CardElement />
<button onClick={handleStripe} >
<span>
Checkout
</span>
</button>
</Elements>
);
}