Skip to content

Commit 4924cb7

Browse files
committed
コードの再利用+フック呼び出しの変更
1 parent 89e2271 commit 4924cb7

File tree

2 files changed

+14
-21
lines changed

2 files changed

+14
-21
lines changed

app/[docs_id]/themeToggle.tsx

Lines changed: 12 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,16 @@
11
"use client";
2-
import { useState, useEffect} from "react";
2+
import { useState, useEffect, use} from "react";
3+
import { set } from "zod";
34

45
export function useChangeTheme(){
56
const [theme, setTheme] = useState("tomorrow");
67
useEffect(() => {
8+
const checkIsDarkSchemePreferred = () =>
9+
window?.matchMedia?.('(prefers-color-scheme:dark)')?.matches ?? false;
10+
const initialTheme = checkIsDarkSchemePreferred() ? "dark" : "light";
11+
document.documentElement.setAttribute("data-theme", initialTheme);
12+
setTheme(initialTheme === "dark" ? "twilight" : "tomorrow");
13+
714
const updateTheme = () => {
815
const theme = document.documentElement.getAttribute("data-theme");
916
setTheme(theme === "dark" ? "twilight" : "tomorrow");
@@ -15,7 +22,6 @@ export function useChangeTheme(){
1522
attributeFilter: ["data-theme"],
1623
});
1724

18-
updateTheme(); // 初回実行
1925

2026
return () => observer.disconnect();
2127
}, []);
@@ -24,25 +30,11 @@ export function useChangeTheme(){
2430
};
2531
export function ThemeToggle() {
2632
const [isChecked, setIsChecked] = useState(false);
33+
const theme = useChangeTheme();
2734
useEffect(() => {
28-
const checkIsDarkSchemePreferred = () =>
29-
window?.matchMedia?.('(prefers-color-scheme:dark)')?.matches ?? false;
30-
setIsChecked(checkIsDarkSchemePreferred());
31-
32-
const updateChecked =() =>{
33-
const theme= document.documentElement.getAttribute("data-theme");
34-
setIsChecked(theme === "dark");
35-
}
36-
37-
const observer = new MutationObserver(updateChecked);
38-
observer.observe(document.documentElement, {
39-
attributes: true,
40-
attributeFilter: ["data-theme"],
41-
});
42-
43-
return () => observer.disconnect();
44-
}, []);
45-
35+
setIsChecked(theme === "twilight");
36+
}, [theme]);
37+
4638
return (
4739
<label className="flex cursor-pointer gap-2" style={{ marginLeft: "1em" }}>
4840
<svg

app/terminal/editor.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ interface EditorProps {
3535
readonly?: boolean;
3636
}
3737
export function EditorComponent(props: EditorProps) {
38+
const theme= useChangeTheme();
3839
const { files, writeFile } = useFile();
3940
const code = files[props.filename] || props.initContent;
4041
const sectionContext = useSectionCode();
@@ -87,7 +88,7 @@ export function EditorComponent(props: EditorProps) {
8788
<AceEditor
8889
name={`ace-editor-${props.filename}`}
8990
mode={props.language}
90-
theme={useChangeTheme()}
91+
theme={theme}
9192
tabSize={props.tabSize}
9293
width="100%"
9394
height={

0 commit comments

Comments
 (0)