你可能不知道的LocalStorage用法

简介: 你可能不知道的LocalStorage用法

写在前面


上周在看关于react-redux的一个在线ppt时,偶然发现了一个现象:

如果我开两个浏览器tab,同时访问这个页面,我在其中一个页面切换ppt,另外一个页面会跟着变化。文章链接在这里:


https://blog.isquaredsoftware.com/presentations/2019-06-react-redux-deep-dive/#/6

640.gif


研究了一下,这个效果其实是用localStorage来实现的。


LocalStorage基本知识点


localStorage, 是一个用来做本地持久化存储的Web Api。localStorage以键值对的形式存储数据。用法很简单:


// 设置localStorage.setItem('myCat', 'Tom');
// 获取let cat = localStorage.getItem('myCat');
// 移除localStorage.removeItem('myCat');
// 移除所有localStorage.clear();


有几个点需要注意:

1、localStorage是以『源(origin)』为维度进行存储的。也就是说,跨域访问其他站点的localStorage是行不通的。

2、localStorage是以字符串的形式保存数据的。

3、对于每一个域,localStorage最多允许存储几M数量级的数据(具体数字因浏览器而异)。


localStorage可以用来做什么:

存储登录token,用户信息等数据;本地持久化保存业务数据;保存代码,以提高网站性能。等等等等…还有本文所要介绍的页面同步。


监听LocalStorage变化


localStorage被改变时(从无到有,从有到无,值改变),会触发一个storage事件。我们可以在window上监听到这个事件。


window.addEventListener('storage', () => {  ...});
window.onstorage = () => {  ...};


这里需要注意的是,在改变localStorage的当前页面,是无法监听到storage事件的。如果我同时打开了多个同源的页面: A页面、B页面、C页面,当在A页面中修改localstorage时,B页面和C页面中都可以监听到storage事件,而A页面是不会触发storage事件的。


一个storage事件的实例如下:

640.jpg


其中比较关键的是keynewValueoldValue这几个值。key表示的是被改变的localStorage的key值,newValue是改变后最新的值,oldValue是旧的值。


实现两个页面同步的效果


了解了上面的知识点,就可以解释本文开头所提到的网页是如何实现多页面同步的了。来实现一个简单的


<html><head>    <style>        .count {            font-size: 20px;            color: red;        }</style></head><body>    <div class="count">0</div>    <button>click</button>    <script>        window.onload = function () {                      var btnEl = document.querySelector('button');            var countEl = document.querySelector('.count');
            btnEl.addEventListener('click', function () {                var curCount = Number(localStorage.getItem('count'));                var newCount = curCount + 1;                countEl.innerHTML = newCount;                localStorage.setItem('count', newCount);            });
            window.addEventListener('storage', function (e) {                var newValue = e.newValue;                countEl.innerHTML = newValue;            });        }</script></body>
</html>


效果如下:

640.gif


写在后面


在平时的业务开发中,localStorage使用的频率也不低,但确实是不知道还可以这么用。以后有遇到页面同步的需求时,localStorage也可以作为一个选项了。符合预期。

相关文章
|
8月前
|
缓存 前端开发 JavaScript
写个localStorage的小例子
写个localStorage的小例子
52 0
|
8月前
|
存储 JavaScript 前端开发
js中session、cookie、 localStorage和SessionStorage的区别和特点
js中session、cookie、 localStorage和SessionStorage的区别和特点
|
4月前
|
存储 移动开发 HTML5
SessionStorage 和 LocalStorage 有什么区别?
SessionStorage 和 LocalStorage 有什么区别?
330 3
|
8月前
|
存储 JavaScript API
LocalStorage/sessionStorage 封装 - 基于TypeScript
文章主要介绍了如何封装一个自定义 Hooks 形式的存储服务,用于在 localStorage 或者 sessionStorage 中进行持久化存储值。通过封装的方法包括 get、set、remove、clearExcept 和 clearAll,使得操作存储变得更加简单和方便。
227 1
|
8月前
|
存储 JavaScript 前端开发
JavaScript DOM 操作:解释一下 cookie、sessionStorage 和 localStorage 的区别。
Cookie是服务器发送至客户端的文本信息,会随每个请求发送回服务器,适合控制会话状态但可能暴露隐私。SessionStorage仅在当前会话中存储数据,关闭浏览器后清除,适合临时存储如登录状态。LocalStorage则持久保存数据,即使关闭浏览器也不会清除,适用于存储长期设置。三种方式各有侧重,应按需求选择。
60 0
|
8月前
|
存储 JavaScript
使用示例代码解释一下如何在Vue中使用LocalStorage或SessionStorage。
使用示例代码解释一下如何在Vue中使用LocalStorage或SessionStorage。
82 3
|
8月前
|
存储 JSON 数据格式
localStorage和sessionStorage的使用和区别
localStorage和sessionStorage的使用和区别
82 0
localStorage和sessionStorage的使用和区别
|
存储 移动开发 JavaScript
session、cookie、localStorage和SessionStorage怎么使用,区别和特点
session、cookie、localStorage和SessionStorage怎么使用,区别和特点
71 0
|
存储 JavaScript 前端开发
带你读《现代Javascript高级教程》十九、详解Cookie, Session, SessionStorage, LocalStorage(1)
带你读《现代Javascript高级教程》十九、详解Cookie, Session, SessionStorage, LocalStorage(1)