diff --git a/apps/client/src/widgets/type_widgets/Spreadsheet.tsx b/apps/client/src/widgets/type_widgets/Spreadsheet.tsx
index c81f5a81d4..85e80c00f6 100644
--- a/apps/client/src/widgets/type_widgets/Spreadsheet.tsx
+++ b/apps/client/src/widgets/type_widgets/Spreadsheet.tsx
@@ -4,22 +4,21 @@ import "./Spreadsheet.css";
import { UniverSheetsCorePreset } from '@univerjs/preset-sheets-core';
import UniverPresetSheetsCoreEnUS from '@univerjs/preset-sheets-core/locales/en-US';
import { createUniver, FUniver, LocaleType, mergeLocales } from '@univerjs/presets';
-import { useEffect, useRef } from "preact/hooks";
+import { MutableRef, useEffect, useRef } from "preact/hooks";
import { useColorScheme } from "../react/hooks";
export default function Spreadsheet() {
- const colorScheme = useColorScheme();
-
- return (
-
- );
-}
-
-function UniverSpreadsheet({ darkMode }: { darkMode: boolean }) {
const containerRef = useRef(null);
const apiRef = useRef();
+ useInitializeSpreadsheet(containerRef, apiRef);
+ useDarkMode(apiRef);
+
+ return ;
+}
+
+function useInitializeSpreadsheet(containerRef: MutableRef, apiRef: MutableRef) {
useEffect(() => {
if (!containerRef.current) return;
@@ -39,14 +38,16 @@ function UniverSpreadsheet({ darkMode }: { darkMode: boolean }) {
apiRef.current = univerAPI;
univerAPI.createWorkbook({});
return () => univerAPI.dispose();
- }, []);
+ }, [ apiRef, containerRef ]);
+}
+
+function useDarkMode(apiRef: MutableRef) {
+ const colorScheme = useColorScheme();
// React to dark mode.
useEffect(() => {
const univerAPI = apiRef.current;
if (!univerAPI) return;
- univerAPI.toggleDarkMode(darkMode);
- }, [ darkMode ]);
-
- return ;
+ univerAPI.toggleDarkMode(colorScheme === 'dark');
+ }, [ colorScheme, apiRef ]);
}