11import "survey-react/modern.min.css" ;
22import * as SurveyJS from "survey-react" ;
3- import React , { useEffect , useRef , useCallback } from "react" ;
3+ import React , { useEffect , useRef , useCallback , useMemo } from "react" ;
44import packageJson from "../package.json" ;
55import { labeledRange } from "./customQuestionTypes/labeledRange" ;
66
@@ -15,8 +15,11 @@ export default function SurveyFactory(surveyName, surveyJson, scoreFunc, sha) {
1515 function BuiltSurvey ( { onComplete, storageName, language } ) {
1616 const timerStartedAt = useRef ( Date . now ( ) ) ;
1717
18- const surveyModel = new SurveyJS . Model ( surveyJson ) ;
19- surveyModel . locale = language ; // set the language for the survey
18+ const surveyModel = useMemo ( ( ) => {
19+ const model = new SurveyJS . Model ( surveyJson ) ;
20+ model . locale = language ; // set the language for the survey
21+ return model ;
22+ } , [ language , surveyJson ] ) ;
2023
2124 const saveState = useCallback (
2225 ( survey ) => {
@@ -75,8 +78,13 @@ export default function SurveyFactory(surveyName, surveyJson, scoreFunc, sha) {
7578 surveyModel . onValueChanged . add ( saveState ) ;
7679 surveyModel . onCurrentPageChanged . add ( saveState ) ;
7780
78- return ( ) => saveState ( surveyModel ) ;
79- } , [ saveState , scoreResponses , clearStorage ] ) ;
81+ return ( ) => {
82+ saveState ( surveyModel ) ;
83+ surveyModel . onComplete . remove ( scoreResponses ) ;
84+ surveyModel . onValueChanged . remove ( saveState ) ;
85+ surveyModel . onCurrentPageChanged . remove ( saveState ) ;
86+ } ;
87+ } , [ saveState , scoreResponses , surveyModel ] ) ;
8088
8189 var prevData = window . localStorage . getItem ( storageName ) || null ;
8290 if ( prevData ) {
0 commit comments