本文原刊於 Rails Designer
儲存某些使用者首選項或外觀設定在 SaaS 應用程式中非常常見。例如字體大小、主題顏色或手風琴的開啟/關閉狀態。
(這個來自我的新 SaaS 的範例儲存了導航部分的狀態)
您可以將這些設定儲存給用戶,特別是當您需要在會話或不同瀏覽器之間恢復這些設定時。我為您介紹了這篇有關為 Rails 添加簡單首選項的文章。但如果不需要保留這些設置,這是一個非常好的且簡單的替代方案。
它涉及一個小型且可重複使用的JavaScript函數和瀏覽器的localStorage。讓我們開始吧。
在此範例中,我將儲存使用者的主題(淺色或深色)。當深色時,深色類別會加入到 html-element 中。然後,這可以用於定位其他元素(就像使用 Tailwind CSS 時使用 dark:bg-gray-950 一樣)。
與 Stimulus 一樣,我們先寫 HTML。這將引導我們接下來要寫什麼:
<div data-controller="theme"> <!-- You can show/hide these buttons based on the .dark class --> <button data-action="theme#update" data-theme-value-param="dark"> Lights Off </button> <button data-action="theme#update" data-theme-value-param="light"> Lights On </button> </div>
然後控制器:
// app/javascript/controllers/theme_controller.js import { Controller } from "@hotwired/stimulus" export default class extends Controller { update({ params: { value } }) { this.#setClass(value); } // private #setClass(theme) { document.documentElement.classList.toggle("dark", theme === "dark"); } }
雖然表面上很簡單,但這裡有兩件事要注意:{ params: { value } }部分和toggle方法中的兩個屬性。
首先是 update 函數中的屬性。它使用了一種叫做破壞的東西。聽起來很困難,但事實並非如此,而且它是 JavaScript 的一個非常酷的功能。在繼續之前讓我們先檢查一下。
預設情況下,事件會傳遞給包含參數的 get 函數。您可能以前見過這個。
get(event) { log(event.params.value) // => "light" or "dark" }
但是如果您不需要 event 物件中的任何其他內容,則可以省略它,如下所示:
get({ params }) { log(params.value) // => "light" or "dark" }
或是當你想使用破壞時,你可以這樣做:
get({ params: { value } }) { log(value) // => "light" or "dark" }
很酷,對吧?然後切換(“暗”,主題===“暗”)。第二個參數(theme ===“dark”)是一個布林強制參數,它明確設定是否應該添加類別(true)或刪除類別(false),而不是僅來回切換
?覺得這一切太難理解了嗎?查看適用於 Rails 開發人員的 JavaScript。 ?
好的,太好了。使用上述控制器,您可以在明暗模式之間切換。也就是說,如果您這樣連接了 CSS,但您注意到一旦螢幕刷新,預設螢幕就會恢復。所選主題未保留!
為此,我們引入 localStorage!它是一個 Web 儲存 API,可讓您在瀏覽器中儲存鍵值對(字串)。
讓我們更新控制器以儲存所選值(「暗」或「亮」)。
<div data-controller="theme"> <!-- You can show/hide these buttons based on the .dark class --> <button data-action="theme#update" data-theme-value-param="dark"> Lights Off </button> <button data-action="theme#update" data-theme-value-param="light"> Lights On </button> </div>
然後在控制器連接後,讀取值:
// app/javascript/controllers/theme_controller.js import { Controller } from "@hotwired/stimulus" export default class extends Controller { update({ params: { value } }) { this.#setClass(value); } // private #setClass(theme) { document.documentElement.classList.toggle("dark", theme === "dark"); } }
這就是為用戶儲存一些設定是多麼容易。請注意,這些值儲存(未加密)在其瀏覽器中。因此,如果他們使用其他瀏覽器,則設定不存在。但在他們重新啟動瀏覽器後它也會被儲存(除非他們清除它)。
除了 setItem 和 getItem 之外,localStorage API 還提供了removeItem 和clear()。
以上是使用 Stimulus 將 UI 狀態儲存在 localStorage 中的詳細內容。更多資訊請關注PHP中文網其他相關文章!

選擇Python還是JavaScript取決於項目類型:1)數據科學和自動化任務選擇Python;2)前端和全棧開發選擇JavaScript。 Python因其在數據處理和自動化方面的強大庫而備受青睞,而JavaScript則因其在網頁交互和全棧開發中的優勢而不可或缺。

Python和JavaScript各有優勢,選擇取決於項目需求和個人偏好。 1.Python易學,語法簡潔,適用於數據科學和後端開發,但執行速度較慢。 2.JavaScript在前端開發中無處不在,異步編程能力強,Node.js使其適用於全棧開發,但語法可能複雜且易出錯。

javascriptisnotbuiltoncorc; sanInterpretedlanguagethatrunsonenginesoftenwritteninc.1)JavascriptwasdesignedAsignedAsalightWeight,drackendedlanguageforwebbrowsers.2)Enginesevolvedfromsimpleterterpretpretpretpretpreterterpretpretpretpretpretpretpretpretpretcompilerers,典型地,替代品。

JavaScript可用於前端和後端開發。前端通過DOM操作增強用戶體驗,後端通過Node.js處理服務器任務。 1.前端示例:改變網頁文本內容。 2.後端示例:創建Node.js服務器。

選擇Python還是JavaScript應基於職業發展、學習曲線和生態系統:1)職業發展:Python適合數據科學和後端開發,JavaScript適合前端和全棧開發。 2)學習曲線:Python語法簡潔,適合初學者;JavaScript語法靈活。 3)生態系統:Python有豐富的科學計算庫,JavaScript有強大的前端框架。

JavaScript框架的強大之處在於簡化開發、提升用戶體驗和應用性能。選擇框架時應考慮:1.項目規模和復雜度,2.團隊經驗,3.生態系統和社區支持。

引言我知道你可能會覺得奇怪,JavaScript、C 和瀏覽器之間到底有什麼關係?它們之間看似毫無關聯,但實際上,它們在現代網絡開發中扮演著非常重要的角色。今天我們就來深入探討一下這三者之間的緊密聯繫。通過這篇文章,你將了解到JavaScript如何在瀏覽器中運行,C 在瀏覽器引擎中的作用,以及它們如何共同推動網頁的渲染和交互。 JavaScript與瀏覽器的關係我們都知道,JavaScript是前端開發的核心語言,它直接在瀏覽器中運行,讓網頁變得生動有趣。你是否曾經想過,為什麼JavaScr

Node.js擅長於高效I/O,這在很大程度上要歸功於流。 流媒體匯總處理數據,避免內存過載 - 大型文件,網絡任務和實時應用程序的理想。將流與打字稿的類型安全結合起來創建POWE


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3漢化版
中文版,非常好用

Dreamweaver Mac版
視覺化網頁開發工具

禪工作室 13.0.1
強大的PHP整合開發環境