---
title: Product Feedback Survey
product: Form Library
description: Product Feedback Survey | JS Survey and Form Library Example for JavaScript
framework: React
source: https://surveyjs.io/form-library/examples/real-productfeedback/reactjs
index: https://surveyjs.io/form-library/examples/overview.md
---

# Product Feedback Survey (React)

## Files

### `public/index.html`

```html
<link href="https://fonts.googleapis.com/css?family=Open%20Sans:400,600&display=swap" rel="stylesheet">
<div id="surveyElement" style="position: absolute; top: 0; left: 0; right: 0; bottom: 0; min-height: 100%; height:100%"></div>
```

### `src/SurveyComponent.jsx`

```js
import React from "react";
import { Model } from "survey-core";
import { Survey } from "survey-react-ui";
import "survey-core/survey-core.min.css";
import "./index.css";
import { json } from "./json";

function SurveyComponent() {
    const survey = new Model(json);
    survey.onComplete.add((sender, options) => {
        console.log(JSON.stringify(sender.data, null, 3));
    });
    return (<Survey model={survey} />);
}

export default SurveyComponent;
```

### `src/index.css`

```css
/* You can add your custom CSS here. */
```

### `src/index.js`

```js
import React from "react";
import { createRoot } from "react-dom/client";
import SurveyComponent from "./SurveyComponent";

const root = createRoot(document.getElementById("surveyElement"));
root.render(<SurveyComponent />);
```

### `src/json.js`

```js
export const json = {
  "pages": [
    {
      "elements": [
        {
          "type": "matrix",
          "name": "Quality",
          "title": "Please indicate if you agree or disagree with the following statements",
          "columns": [
            {
              "value": 1,
              "text": "Strongly Disagree"
            },
            {
              "value": 2,
              "text": "Disagree"
            },
            {
              "value": 3,
              "text": "Neutral"
            },
            {
              "value": 4,
              "text": "Agree"
            },
            {
              "value": 5,
              "text": "Strongly Agree"
            }
          ],
          "rows": [
            {
              "value": "affordable",
              "text": "Product is affordable"
            },
            {
              "value": "does what it claims",
              "text": "Product does what it claims"
            },
            {
              "value": "better then others",
              "text": "Product is better than other products on the market"
            },
            {
              "value": "easy to use",
              "text": "Product is easy to use"
            }
          ]
        },
        {
          "type": "rating",
          "name": "satisfaction",
          "title": "How satisfied are you with our product?",
          "isRequired": true,
          "minRateDescription": "Not Satisfied",
          "maxRateDescription": "Completely satisfied"
        },
        {
          "type": "rating",
          "name": "recommend friends",
          "visibleIf": "{satisfaction} > 3",
          "title": "How likely are you to recommend our product to a friend or co-worker?",
          "minRateDescription": "Will not recommend",
          "maxRateDescription": "I will recommend"
        },
        {
          "type": "comment",
          "name": "suggestions",
          "title": "What would make you more satisfied with our product?"
        }
      ]
    },
    {
      "elements": [
        {
          "type": "radiogroup",
          "name": "price to competitors",
          "title": "Compared to our competitors, do you feel our product is",
          "choices": [ "Less expensive", "Priced about the same", "More expensive", "Not sure" ]
        },
        {
          "type": "radiogroup",
          "name": "price",
          "title": "Do you feel our current price is merited by our product?",
          "choices": [
            "correct|Yes, the price is about right",
            "low|No, the price is too low for your product",
            "high|No, the price is too high for your product"
          ]
        },
        {
          "type": "multipletext",
          "name": "pricelimit",
          "title": "What is the... ",
          "items": [
            {
              "name": "mostamount",
              "title": "Most amount you would every pay for a product like ours"
            },
            {
              "name": "leastamount",
              "title": "The least amount you would feel comfortable paying"
            }
          ]
        }
      ]
    },
    {
      "elements": [
        {
          "type": "text",
          "name": "email",
          "title": "Thank you for taking our survey. Your survey is almost complete, please enter your email address in the box below if you wish to participate in our drawing, then press the 'Submit' button."
        }
      ]
    }
  ]
};
```

### `src/theme.js`

```js
export const themeJson = {};
```

### `package.json`

```json
{
  "dependencies": {
    "react": "latest",
    "react-dom": "latest",
    "survey-core": "latest",
    "survey-react-ui": "latest"
  },
  "devDependencies": {
    "react-scripts": "latest"
  }
}
```

## Other Frameworks

- [Angular](https://surveyjs.io/form-library/examples/real-productfeedback/angular.md)
- [Vue 3](https://surveyjs.io/form-library/examples/real-productfeedback/vue3js.md)
- [jQuery](https://surveyjs.io/form-library/examples/real-productfeedback/jquery.md)
- [Vanilla JS](https://surveyjs.io/form-library/examples/real-productfeedback/vanillajs.md)
