DEV Community

Cover image for Dark Mode React & Tailwind CSS
Muhammad Mahib Arib
Muhammad Mahib Arib

Posted on • Updated on

Dark Mode React & Tailwind CSS

Halo guys, pada kali ini saya akan membagikan cara menerapkan dark mode pada project React kita dengan menggunakan Tailwind CSS. Langsung saja kita mulai.

Silahkan persiapkan project Anda. Anda bisa mengikuti artikel berikut untuk installasi project React dan Tailwind CSS. Cara Install Tailwind CSS pada React project.

Jika sudah, buka file tailwind.config.js tambahkan kode berikut pada bagian module.exports.

module.exports = {
  darkMode: 'class',
  // ...
}
Enter fullscreen mode Exit fullscreen mode

Kode tersebut berfungsi untuk mengaktifkan class dark pada Tailwind. Kelas tersebut akan aktif jika pada mode dark. Untuk menggunakannya anda hanya perlu menuliskan dark: diikuti dengan nama class. Anda bisa lihat lebih lanjut pada artikel berikut. Dark Mode - Tailwind CSS.

Selanjutnya kita akan menggunakan package dari NPM untuk membuat ikonnya. Jadi kita tidak perlu repot mempersiapkan ikon sendiri karena pada package tersebut telah disiapkan ikon untuk mode gelap dan terang dan juga terdapat animasi pada transisinya. Untuk lebih lengkapnya, Anda bisa lihat pada artikel berikut. React Toggle Dark Mode.

Lakukan installasi dan tunggu hingga selesai.

npm i react-toggle-dark-mode
Enter fullscreen mode Exit fullscreen mode

Pada kasus ini, saya akan menempatkan tombol toggle dark mode pada bagian header. Berikut ini kode file Header.js saya.

import React from "react";
import Switcher from "./Switcher";

function Header() {
  return (
    <header className="bg-purple-500 text-white font-bold text-3xl dark:bg-slate-800">
      <div className="container flex justify-between p-5 mx-auto items-center uppercase">
        <h1>Example App</h1>
        <Switcher />
      </div>
    </header>
  );
}

export default Header;
Enter fullscreen mode Exit fullscreen mode

Buat sebuah file untuk meletakkan kode toggle dark mode Anda. Pada kasus ini saya memberi nama file tersebut dengan Switcher.js. Letakkan komponen Switcher tersebut pada Header dan lakukan import berkas. Berikut ini isi dari kode Switcher.js.

import React, { useState } from "react";
import { DarkModeSwitch } from "react-toggle-dark-mode";
import UseDarkSide from "./UseDarkSide";

function Switcher() {
  const [colorTheme, setTheme] = UseDarkSide();
  const [darkSide, setDarkSide] = useState(
    colorTheme === "light" ? true : false
  );
  const toggleDarkMode = (checked) => {
    setTheme(colorTheme);
    setDarkSide(checked);
  };

  return (
    <DarkModeSwitch checked={darkSide} onChange={toggleDarkMode} size={30} />
  );
}

export default Switcher;
Enter fullscreen mode Exit fullscreen mode

Komponen DarkModeSwitch adalah komponen bawaan dari package yang kita install tadi.

Terakhir kita buat satu buah file untuk menyimpan pilihan tema mode kita pada local storage. Jadi jika kita refresh atau kita tutup browser, tema mode yang aktif tidak berubah. Buat file bernama UseDarkSide dan berikut ini isi dari file tersebut.

import { useEffect, useState } from "react";

function UseDarkSide() {
  const [theme, setTheme] = useState(localStorage.theme);
  const colorTheme = theme === "dark" ? "light" : "dark";
  useEffect(() => {
    const root = window.document.documentElement;
    root.classList.remove(colorTheme);
    root.classList.add(theme);
    localStorage.setItem("theme", theme);
  }, [theme, colorTheme]);

  return [colorTheme, setTheme];
}

export default UseDarkSide;
Enter fullscreen mode Exit fullscreen mode

Selesai dan fitur dark mode Anda sudah bisa digunakan.

Top comments (0)