Skip to main content

React

React treats JustiFi web components like any other custom element. Load the bundle, optionally declare types, and use refs for method calls or event wiring.

Usage

Load the components

<head>
<script
  async
  type="module"
  src="https://cdn.jsdelivr.net/npm/@justifi/webcomponents@6.7.3/dist/webcomponents/webcomponents.esm.js"
></script>

</head>

Or install the package:

npm install --save @justifi/webcomponents

Then import the module you need:

import '@justifi/webcomponents/dist/module/justifi-checkout.js';

Render inside JSX

export function CheckoutExample() {
return (
<justifi-checkout auth-token="token" checkout-id="chk_123" locale="en-US" />
);
}

TypeScript integration

Let TypeScript know about the generated intrinsic elements so JSX understands attributes and custom events.

// register-web-components.ts
import { JSX as LocalJSX } from '@justifi/webcomponents/dist/loader';
import { HTMLAttributes } from 'react';

type StencilToReact<T> = {
[K in keyof T]?: T[K] &
Omit<HTMLAttributes<Element>, 'className'> & {
class?: string;
};
};

declare global {
export namespace JSX {
interface IntrinsicElements
extends StencilToReact<LocalJSX.IntrinsicElements> {}
}
}

Import that file once at the edge of your application (for example inside src/main.tsx) so the declarations register globally.

Calling methods with refs

import { useRef } from 'react';

export default function CheckoutWithRef() {
const checkoutRef = useRef<any>(null);

const fillBillingForm = () => {
checkoutRef.current?.fillBillingForm({
name: 'John Doe',
address_line1: '123 Main St',
address_city: 'Minneapolis',
address_state: 'MN',
address_postal_code: '55401',
});
};

return (
<>
<justifi-checkout
ref={checkoutRef}
auth-token="token"
checkout-id="chk_123"
/>
<button onClick={fillBillingForm}>Prefill billing</button>
</>
);
}

Listening to events

Attach listeners with addEventListener inside useEffect or via inline handlers if you wrap the component.

import { useEffect, useRef } from 'react';

export function CheckoutWithEvents() {
const checkoutRef = useRef<any>(null);

useEffect(() => {
const element = checkoutRef.current;
if (!element) {
return;
}

const handleSubmit = (event: CustomEvent) => {
console.log('Submit payload', event.detail);
};

element.addEventListener('submit-event', handleSubmit);
return () => element.removeEventListener('submit-event', handleSubmit);
}, []);

return (
<justifi-checkout
ref={checkoutRef}
auth-token="token"
checkout-id="chk_123"
/>
);
}