首页 > web前端 > js教程 > 使用 Stimulus 将 UI 状态存储在 localStorage 中

使用 Stimulus 将 UI 状态存储在 localStorage 中

Linda Hamilton
发布: 2024-11-10 08:08:02
原创
936 人浏览过

本文最初发表于 Rails Designer


存储某些用户首选项或外观设置在 SaaS 应用程序中非常常见。例如字体大小、主题颜色或手风琴的打开/关闭状态。

Store UI State in localStorage with Stimulus

(这个来自我的新 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中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板