• Czas czytania ~2 min
  • 12.02.2023

  🏎 Zacznijmy

aktualizować konfigurację Tailwind, aby poinformować ją o potrzebie przełączania trybu ciemnego w zależności od klasy.

// tailwind.config.js
module.exports = {
  darkMode: 'class',
  // ...
}

Umożliwi to pisanie bg-gray-50 dark:bg-black i wyświetlanie kolorów tła w oparciu o bieżący tryb.

<html class="dark">
<body>
  <div class="bg-gray-100 dark:bg-gray-600">
    <!-- ... -->
  </div>
</body>
</html>

Teraz spróbujmy usunąć tę zakodowaną klasę w html tagu i pobrać wartość z localStorage użycia Alpine

<html
  x-data="{ darkMode: localStorage.getItem('dark') === 'true'} "
  x-init="$watch('darkMode', val => localStorage.setItem('dark', val))"
  x-bind:class="{ 'dark': darkMode }"
>
  🤔 Wait, what's going on here?
x-data="{ darkMode: localStorage.getItem('dark') === 'true' "

x-data tells the framework to initialize a new component with the following data object. In our case, the object is:

{ darkMode: localStorage.getItem('dark') === 'true'}

, myślę o tym jako o prostej zmiennej i ustawieniu darkModewartości 's na wartość true false lub na podstawie wartości elementu darklocalStorage.dark

x-init="$watch('darkMode', val => localStorage.setItem('dark', val))"

$watch is a magic property (yup, that's the official terminology 😁) in Alpine used to watch data we have and trigger a function.

x-init You might have already guessed it. It runs an expression when a component is initialized.

Tak dobrze do tej pory? Jeśli nie, daj mi znać. Postaram się wyjaśnić w komentarzach i odpowiednio

zaktualizować ten post Dodajmy teraz przycisk, aby przełączyć motyw

<button @click="darkMode = !darkMode">
  Toggle Theme
</button>
  🏁 Yup, that's all you need 😎

. Oto dopracowana wersja, której użyłem w HIGHSCORE.domains Po raz pierwszy używam AlpineJS i zostałem wyróżniony w Alpine.js Weekly #61 przez @hugo__df

highscore.domains


toggle

dostał darkmode toggled powered by Alpine i TailwindUI przez @onerinas

Screenshot 2021-05-31 at 8.07.54 AM


Zostawiając tutaj kilka linków, które mogą być przydatne, jeśli chcesz wypróbować to w swoim projekcie:

 

AlpineJS:

x-init

Runs an expression when a component is initialized.

https://github.com/alpinejs/alpine#x-init

x-data

Declares a new component scope.

https://github.com/alpinejs/alpine#x-data

x-bind

Sets the value of an attribute to the result of a JS expression.

https://github.com/alpinejs/alpine#x-bind

$watch

Will fire a provided callback when a component property you "watched" gets changed.

https://github.com/alpinejs/alpine#watch

Comments

No comments yet
Yurij Finiv

Yurij Finiv

Full stack

O

Professional Fullstack Developer with extensive experience in website and desktop application development. Proficient in a wide range of tools and technologies, including Bootstrap, Tailwind, HTML5, CSS3, PUG, JavaScript, Alpine.js, jQuery, PHP, MODX, and Node.js. Skilled in website development using Symfony, MODX, and Laravel. Experience: Contributed to the development and translation of MODX3 i...

O autorze CrazyBoy49z
WORK EXPERIENCE
Kontakt
Ukraine, Lutsk
+380979856297

Codziennie zestrzeliwujemy „Shahedy”. Za każdym razem to uratowane życie. Potrzebujemy mobilności: busa lub przyczepy. Każda wpłata = kolejna noc pod ochroną.

🚐 Zbiórka na busa dla zespołu, pułk 1020 🎯 Cel: 500 000 ₴
🔗 Link do zbiórkiі 💳 4441 1111 2546 4663