How to set up surveys in React
Mar 07, 2025
Surveys are a great tool to collect qualitative feedback from your users. This tutorial shows you how to easily set up surveys in your React app.
We'll create a React app with Vite, add PostHog, create a survey, and then add the code to show the survey in-app and collect responses.
Creating a React app with Vite
First, create a React app using Vite and go into the newly created react-survey folder.
Next, replace the boilerplate code in src/App.jsx with the following:
Finally, run npm run dev and go to http://localhost:5173 to see our new homepage.
 
 
Adding PostHog
PostHog will manage our survey and track our results. To use PostHog's React SDK, install posthog-js:
Once installed, import PostHog into src/main.jsx and set up a client using your project API key and host from your project settings. Then, wrap the app with PostHogProvider to access PostHog in any component.
With PostHog set up, our React app is ready for the survey.
Creating a survey
There are two options for displaying a survey using PostHog:
- Use PostHog's prebuilt survey UI.
- Implement your own survey UI.
This tutorial will cover how to implement both options.
Option 1: Use PostHog's prebuilt survey UI
For fast set up, you can use PostHog's prebuilt surveys. There are variety of survey types to choose from, and PostHog handles all the display logic and event capture for you.
To create a survey with a prebuilt UI, go to the Surveys tab in PostHog and click New survey. Select a template like Open feedback, customize it how you'd like, click Save as draft, and then Launch.


Your survey is now live and you should see it in your app. There are no further code changes needed!

Popover surveys provide a bunch of customization options like colors, text, position, font, targeting, completion conditions, and more.
Option 2: Implement your own survey UI
If you want more customization than what PostHog's prebuilt surveys provide, you can implement your own survey UI.
To do this, go to the surveys tab, click New survey, and select the Net promoter score template (others work too, but we'll use this as an example). On the new survey page, set Presentation to API, click Save as draft, and then Launch.


Once created, there are three parts to implementing it in your app:
- Create the survey UI.
- Add the logic for displaying it.
- Capture interactions from it.
1. Create the survey UI
We've created an example survey UI for this tutorial. To use it, create a new file in the src folder called Survey.jsx and paste the following code:
Then, add the following CSS styles to your index.css file:
Finally, integrate the component into App.jsx:
This shows a survey popup every time you visit your app's homepage.

2. Add the logic for displaying it.
The first part of handling our display logic is fetching the survey from PostHog. PostHog keeps track of all active surveys for a user (this is especially helpful if you have set up custom display conditions).
To fetch the active surveys, we use the usePostHog hook to retrieve our PostHog instance. Then, we call posthog.getActiveMatchingSurveys() using useEffect():
posthog.getActiveMatchingSurveys() returns a surveys object that looks like this:
We can use this survey object (especially the id and questions) to configure our Survey component in App.jsx:
Finally, we want to make sure we don't show the survey again to users who have either submitted or dismissed it.
We use localStorage to store this data. Then, we'll add a check to show the survey based on whether the user has already interacted with it or not:
3. Capture interactions from it.
The final step in setting up our survey is capturing interactions. This enables us to analyze the results in PostHog.
There are 3 events to capture:
- survey shown
- survey dismissed
- survey sent(for responses)
You can capture these events using posthog.capture():
Final App.jsx code
That's it! Our survey is ready to go!
Viewing results
After interacting with your survey, you can view results by selecting the survey from the surveys tab. You'll see data on:
- How many users have seen the survey.
- How many users have dismissed the survey.
- Responses, including visuals like trends or NPS distributions.
If you capture identified events, you can also filter these results based on person properties, cohorts, feature flags and more.


Further reading
- How to write great product survey questions (with examples)
- Get feedback and book user interviews with surveys
- How to set up analytics in React
- How to set up feature flags in React
Subscribe to our newsletter
Product for Engineers
Read by 45,000+ founders and builders.
We'll share your email with Substack
Questions? Ask Max AI.
It's easier than reading through 609 docs articles.