--- title: How to set up analytics in React date: 2025-03-07 author: - lior-neu-ner tags: - product analytics --- [Product analytics](/product-analytics) enables you to gather and analyze data about how users interact with your React app. To show you how to set up analytics, in this tutorial we create a basic React app with Vite, add PostHog, and use it to capture pageviews and custom events. ## Creating a React app with Vite To demonstrate the basics of PostHog analytics, we'll create a simple app with two pages and a link to navigate between them. First, ensure [Node.js is installed](https://nodejs.dev/en/learn/how-to-install-nodejs/) (version 20.0 or newer). Then create a new React app with Vite: ```bash npm create vite@latest react-analytics -- --template react cd react-analytics npm install ``` Next, create two new files `HomePage.jsx` and `AboutPage.jsx` in your `src` directory: ```bash cd ./src touch HomePage.jsx touch AboutPage.jsx ``` In `HomePage.jsx`, add the following code: ```jsx file=src/HomePage.jsx function HomePage() { return

Home Page

; } export default HomePage; ``` In `AboutPage.jsx`, add the following code: ```jsx file=src/AboutPage.jsx function AboutPage() { return

About Page

; } export default AboutPage; ``` Next, we set up the routing. First, install React Router in your project: ```bash npm install react-router-dom ``` Then, set up the router by replacing the code in `App.jsx` with the following: ```jsx file=App.jsx import React from 'react'; import { BrowserRouter as Router, Route, Link, Routes } from 'react-router-dom'; import HomePage from './HomePage'; import AboutPage from './AboutPage'; function App() { return (
} /> } />
); } export default App; ``` The basic setup is now complete. Run `npm run dev` to see your app in action. ![Basic React app](https://res.cloudinary.com/dmukukwp6/image/upload/Clean_Shot_2025_03_07_at_10_01_01_2x_979f06e01f.png) ## Adding PostHog With our app set up, it's time to install and set up PostHog. If you don't have a PostHog instance, you can [sign up for free](https://us.posthog.com/signup). First install `posthog-js` and `@posthog/react`: ```bash npm install posthog-js @posthog/react ``` Next, import PostHog into `src/main.jsx` and set up it up using your project API key and host from [your project settings](https://us.posthog.com/settings/project). Then we wrap our app with `PostHogProvider` to access PostHog in any component. ```jsx file=src/main.jsx import React from 'react' import ReactDOM from 'react-dom/client' import './index.css' import App from './App.jsx' import posthog from 'posthog-js' import { PostHogProvider } from '@posthog/react' posthog.init('', { api_host: '', defaults: '', }) ReactDOM.createRoot(document.getElementById('root')).render( , ) ``` Once you've done this, reload your app and click the links a few times. You should see pageviews and events appearing in PostHog's [activity tab](https://us.posthog.com/activity/explore). ## Capturing custom events Beyond pageviews and autocaptured events, there might be more events you want to capture. To do this, you can [capture custom events](/docs/product-analytics/capture-events) with PostHog. To showcase this, update the code in `HomePage.jsx` to include a button that uses PostHog to capture a `home_button_clicked` event: ```jsx file=HomePage.jsx import { usePostHog } from '@posthog/react' function HomePage() { const posthog = usePostHog() return (

Home Page

); } export default HomePage; ``` Now when you click the button, PostHog captures the custom `home_button_clicked` event. Notice that we also added a property `user_name` to the event. This is helpful for filtering events in PostHog. ## Further reading - [How to set up surveys in React](/tutorials/react-surveys) - [How to set up A/B tests in React](/tutorials/react-ab-testing) - [How to set up feature flags in React](/tutorials/react-feature-flags)