I am creating a Vue3 application, I am trying to integrate it with stripe, but I can't.
this is my Vue3 component: Checkout.vue
<template>
....
...
</template>
<script lang="ts" setup>
import { onMounted, ref, reactive, computed} from 'vue';
import { loadStripe } from '@stripe/stripe-js'
import { useShoppingCart } from '@/stores/shoppingcart'
import axios from 'axios'
import { useRouter } from 'vue-router';
const shoppingcart = useShoppingCart()
const router = useRouter()
const stripe = reactive({})
const cardElement = reactive({})
const customer = reactive({
first_name: '',
last_name: ''
...
...
})
const paymentProcessing = ref(false)
onMounted(async () => {
stripe = await loadStripe(import.meta.env.VITE_MIX_STRIPE_KEY)
let elements = stripe.elements();
cardElement = elements.create('card', {
classes: {
base: 'bg-gray-100 rounded border border-gray-300 focus:border-indigo-500 text-base outline-none text-gray-700 p-3 leading-8 transition-colors duration-200 ease-in-out'
}
});
cardElement.mount('#card-element');
});
const processPayment = async () => {
paymentProcessing.value = true;
const {paymentMethod, error} = await stripe.createPaymentMethod(...)
....
}
The error message I got is this:
Cannot assign to 'stripe' because it is a constant.
And the Vue component can't load the stripe credit cart input. I need to use stripe not only in the onMounted hooks, also I need to use it in the processPayment method.
What can I do? thanks.
You are trying to assign to a const variable that is why.
Change it to a let