0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

imdb clone Part6 5 Add a darkMode 4/○ hydration Errorを修正

Last updated at Posted at 2023-05-09

概要

目次

今回はhydration errorが出ているので改善を行います。

hydration errorとは最初のレンダリングにおいて、SSR or ISRとCLRが一致してないことによるエラーのようです。(詳細は参考の部分参照)

改善前
image.png

改善後 hydarion Errorが無くなっていることを確認できます。

image.png

開発環境

OS:Windows10
IDE:VSCode

"@next/font": "13.1.5",
"autoprefixer": "10.4.14",
"eslint": "8.39.0",
"eslint-config-next": "13.3.1",
"next": "13.3.1",
"postcss": "8.4.23",
"react": "18.2.0",
"react-dom": "18.2.0",
"react-icons": "^4.8.0",
"tailwindcss": "3.3.2"

実装のポイント

react-themeのドキュメントに回避方法があるのでそれを参考にします。

image.png

コード部分

Layout

Layout.jsx
"use client";
import {useEffect, useState } from 'react'
import {MdLightMode} from "react-icons/md";
import {BsFillMoonFill} from "react-icons/bs"
import {useTheme} from "next-themes";


export default function DarkModeSwitch() {
    const{systemTheme,theme,setTheme} = useTheme();
+    const [mounted,setMounted] = useState(false);

+    useEffect(() => setMounted(true),[]);
    
    const currentTheme = theme === "system" ? systemTheme : theme;
    
    return (
    <>  
+        {mounted && ( currentTheme === "dark" ? (
            <MdLightMode 
                onClick={() => setTheme("light")}/>) : (
        <BsFillMoonFill onClick={() => setTheme("dark")}/>))}
    </>
  )
}

参考

Hydration Error

image.png

react-theme

image.png

その他

Udemy

githubコミット分

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?