Skip to main content

useWebVitals

Description and use case

useWebVitals provides live Core Web Vitals data and optional metric callbacks for analytics pipelines.

API signature

function useWebVitals(options?: UseWebVitalsOptions): WebVitalsState

Parameters

NameTypeRequiredDescription
options.onMetric(metric: WebVitalMetric) => voidNoCallback fired whenever a metric is updated.
options.enabledbooleanNoSet false to disable subscriptions (useful for SSR/tests).

Return value

FieldTypeDescription
CLSWebVitalMetric | nullCumulative Layout Shift metric.
LCPWebVitalMetric | nullLargest Contentful Paint metric.
INPWebVitalMetric | nullInteraction to Next Paint metric.
FCPWebVitalMetric | nullFirst Contentful Paint metric.
TTFBWebVitalMetric | nullTime to First Byte metric.

Live interactive demo (StackBlitz)

This demo uses an embedded StackBlitz sandbox. Load it inline or open it in a new tab.

Open demo in StackBlitz

Code example

import {useWebVitals} from 'react-perf-hooks';

export function VitalsOverlay() {
const vitals = useWebVitals({
onMetric: (metric) => {
navigator.sendBeacon('/api/vitals', JSON.stringify(metric));
},
});

return <p>LCP: {vitals.LCP?.value ?? 'waiting'}</p>;
}

Companion article