Quellcode durchsuchen

improve useEffect perf

AykutSarac vor 3 Jahren
Ursprung
Commit
d01858b0fe
1 geänderte Dateien mit 13 neuen und 19 gelöschten Zeilen
  1. 13 19
      src/containers/JsonEditor/index.tsx

+ 13 - 19
src/containers/JsonEditor/index.tsx

@@ -31,9 +31,7 @@ const JsonEditor: React.FC = () => {
     dispatch,
     dispatch,
   } = useConfig();
   } = useConfig();
   const [editorWidth, setEditorWidth] = React.useState("auto");
   const [editorWidth, setEditorWidth] = React.useState("auto");
-  const [value, setValue] = React.useState(
-    JSON.stringify(JSON.parse(json), null, 2)
-  );
+  const [value, setValue] = React.useState("");
   const [error, setError] = React.useState({
   const [error, setError] = React.useState({
     message: "",
     message: "",
     isExpanded: true,
     isExpanded: true,
@@ -53,32 +51,28 @@ const JsonEditor: React.FC = () => {
     const dom = document.querySelector(".ace_scroller");
     const dom = document.querySelector(".ace_scroller");
     if (dom) resizeObserver.observe(dom);
     if (dom) resizeObserver.observe(dom);
 
 
-    return () => {
-      resizeObserver.disconnect();
-    };
-  }, [json]);
+    return () => resizeObserver.disconnect();
+  }, []);
 
 
   React.useEffect(() => {
   React.useEffect(() => {
     if (settings.autoformat) {
     if (settings.autoformat) {
-      return setValue(JSON.stringify(JSON.parse(json), null, 2));
+      setValue(JSON.stringify(JSON.parse(json), null, 2));
+    } else {
+      setValue(json);
     }
     }
-
-    setValue(json);
   }, [settings.autoformat, json]);
   }, [settings.autoformat, json]);
 
 
   React.useEffect(() => {
   React.useEffect(() => {
     const formatTimer = setTimeout(() => {
     const formatTimer = setTimeout(() => {
       try {
       try {
-        if (value === "") return setError((err) => ({ ...err, message: "" }));
-        const parsedJson = parseJson(value);
-
-        if (settings.autoformat) {
-          setValue(JSON.stringify(parsedJson, null, 2));
-        } else {
-          setValue(value);
+        if (value) {
+          parseJson(json);
+          dispatch({
+            type: ConfigActionType.SET_JSON,
+            payload: value,
+          });
         }
         }
 
 
-        dispatch({ type: ConfigActionType.SET_JSON, payload: value });
         setError((err) => ({ ...err, message: "" }));
         setError((err) => ({ ...err, message: "" }));
       } catch (jsonError: any) {
       } catch (jsonError: any) {
         setError((err) => ({ ...err, message: jsonError.message }));
         setError((err) => ({ ...err, message: jsonError.message }));
@@ -86,7 +80,7 @@ const JsonEditor: React.FC = () => {
     }, 1800);
     }, 1800);
 
 
     return () => clearTimeout(formatTimer);
     return () => clearTimeout(formatTimer);
-  }, [value, settings.autoformat, dispatch]);
+  }, [value, dispatch]);
 
 
   return (
   return (
     <StyledEditorWrapper>
     <StyledEditorWrapper>