当不公发生在谁身上 發表於 2020-1-18 10:42:00

uni-app,vue,react,Trao之缓存类封装

<h1 style="text-align: center">uni-app,vue,react,Trao之缓存类封装</h1>
<h2>一,介绍与需求</h2>
<h3>1.1,介绍</h3>
<p style="margin-left: 30px">缓存主要分为如下几个</p>
<p style="margin-left: 30px">1、LocalStorage</p>
<p style="margin-left: 30px">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;LocalStorage是永久性的本地缓存,存储在客户端的浏览器上,除非主动删除,是不会过期的。LocalStorage采用的是键值对的方式进行存储,存储方式只能是字符串。存储内容可以用图片、json、样式、脚本等。</p>
<p style="margin-left: 30px">&nbsp; &nbsp; &nbsp; &nbsp; API基本使用方法:</p>
<p style="margin-left: 30px">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1.1、localStorage.setItem() 存储</p>
<p style="margin-left: 30px">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1.2、localStorage.getItem() 获取数据,其中使用localStorage.valueOf()获取全部数据</p>
<p style="margin-left: 30px">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1.3、localStorage.removeItem(key) 删除数据</p>
<p style="margin-left: 30px">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1.4、localStorage.clear()清空全部数据,localStorage.length 获取本地存储数据数量</p>
<p style="margin-left: 30px">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1.5、localStorage.key(N)获取第N个数据的key键值</p>
<p style="margin-left: 30px">&nbsp;2、SessionSotrage</p>
<p style="margin-left: 30px">&nbsp; &nbsp; &nbsp; &nbsp;SessionStorage用于本地存储一个会话中的数据,这些数据只有在同一个会话中的页面才能访问并且会话结束,窗口关闭后,数据就会消失。是一种会话级别的存储。</p>
<p style="margin-left: 30px">&nbsp; &nbsp; &nbsp; &nbsp;SessionStorage与localStorage 的使用方法相似</p>
<p style="margin-left: 30px">&nbsp;3、cookie</p>
<p style="margin-left: 30px">&nbsp; &nbsp; &nbsp; &nbsp;cookie与sessionStorage、localStorage还是有很大不同的。</p>
<p style="margin-left: 30px">&nbsp; &nbsp; &nbsp; &nbsp; 3.1、cookie数据始终在同源的http请求中携带,cookie在浏览器和服务器端来回传递,而localstorage和sessionstorage不会自动把数据传送给服务器端,仅在本地保存。</p>
<p style="margin-left: 30px">&nbsp; &nbsp; &nbsp; &nbsp; 3.2、存储大小限制不同,cookie的存储数据大小要求不能超过4k,每次的http请求都会携带cookie,所以保存的数据需要比较小。sessionstorage和localstorage存储数据大小限制比cookie要大,可以达到5M或者更大,不同浏览器设置可能不同。</p>
<p style="margin-left: 30px">&nbsp; &nbsp; &nbsp; &nbsp; 3.3、数据生命周期。cookie的生命周期一般在其设置的过期时间之前有效。而sessionstorage仅在关闭窗口前有效,localstorage持久有效,直到手动删除。</p>
<p style="margin-left: 30px">&nbsp; &nbsp; &nbsp; &nbsp; 3.4、作用域不同,sessionstorage不在不同浏览器中共享,即使是同一页面也不支持。而localstorage在所有同源窗口中都是共享的,同样,cookie在所有同源窗口中也是可以共享的。</p>
<p style="margin-left: 30px">&nbsp; &nbsp; &nbsp; &nbsp; 3.5、cookie的数据还有路径的概念,可以通过设置限制cookie只属于某个路径</p>
<p style="margin-left: 30px">&nbsp; &nbsp; &nbsp; &nbsp; 3.6、webstorage 支持事件通知机制,可以将数据更新的通知发送给监听者。</p>
<p style="margin-left: 30px">&nbsp; 4、离线存储</p>
<p style="margin-left: 30px">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;通过创建cache mainfest文件,创建应用缓存</p>
<p style="margin-left: 30px">对浏览器来说,使用 Web Storage 存储键值对比存储 Cookie 方式更直观,而且容量更大,它包含两种:localStorage 和 sessionStorage主要有以下一些优点:</p>
<p style="margin-left: 30px">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1、减少网络流量:使用webstorage将数据保存在本地中,减少不必要的请求。</p>
<p style="margin-left: 30px">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2、快速显示数据:从本地获取数据比通过网络从服务器获取数据效率更高,因此网页显示也比较快;</p>
<p style="margin-left: 30px">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;3、临时存储:很多时候数据只需在用户浏览一组页面期间使用,关闭窗口后数据就会丢失,使用sessionstorage 比较方便;</p>
<p style="margin-left: 30px">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;4、不影响网络效能:因为webstorage只作用在客户端的浏览器,不会占用频宽。</p>
<p style="margin-left: 30px">uni-app缓存介绍,Trao缓存介绍,不同端的缓存可以参照相应的文档,这儿主要介绍通用类的缓存封装介绍。</p>
<h3>1.2,需求</h3>
<p style="margin-left: 30px">1,记录用户登录成功的信息,比如token等,</p>
<p style="margin-left: 30px">2,减少接口请求的次数,</p>
<p style="margin-left: 30px">3,记住密码,方便下次登录。</p>
<h2>二,封装缓存类</h2>
<p style="margin-left: 30px"><strong>第一步:</strong>新建类</p>
<p style="margin-left: 30px">新建一个叫Storage的缓存类,并提供构造函数,方便接收传入的参数。</p>
<div class="cnblogs_code" style="margin-left: 30px">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> <span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span> <span style="color: rgba(0, 128, 0, 1)"> * 数据缓存类
</span><span style="color: rgba(0, 128, 128, 1)"> 3</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)"> 4</span> export <span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> class Storage {
</span><span style="color: rgba(0, 128, 128, 1)"> 5</span>   <span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span> <span style="color: rgba(0, 128, 0, 1)">   * 数据缓存类构造方法
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span> <span style="color: rgba(0, 128, 0, 1)">   * @param appKey 用于存储数据时键名的前缀
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span> <span style="color: rgba(0, 128, 0, 1)">   * @param storage 本地存储或会话存储
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span>      <span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)">10</span> <span style="color: rgba(0, 0, 0, 1)">    constructor(appKey, storage) {
</span><span style="color: rgba(0, 128, 128, 1)">11</span>         <span style="color: rgba(0, 0, 255, 1)">this</span>.__storage = storage ||<span style="color: rgba(0, 0, 0, 1)"> localStorage;
</span><span style="color: rgba(0, 128, 128, 1)">12</span>         <span style="color: rgba(0, 0, 255, 1)">this</span>.__appKey = appKey ? appKey + '-' : ''<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">13</span> <span style="color: rgba(0, 0, 0, 1)">    }
</span><span style="color: rgba(0, 128, 128, 1)">14</span> }</pre>
</div>
<p style="margin-left: 30px"><strong>第二步:</strong>保存数据到本地</p>
<p style="margin-left: 30px">在上面类中添加保存数据到本地的方法,并提交有效期,如下:</p>
<div class="cnblogs_code" style="margin-left: 30px">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> <span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span> <span style="color: rgba(0, 128, 0, 1)">   * 存储数据
</span><span style="color: rgba(0, 128, 128, 1)"> 3</span> <span style="color: rgba(0, 128, 0, 1)">   * @param key   键名
</span><span style="color: rgba(0, 128, 128, 1)"> 4</span> <span style="color: rgba(0, 128, 0, 1)">   * @param v   键值
</span><span style="color: rgba(0, 128, 128, 1)"> 5</span> <span style="color: rgba(0, 128, 0, 1)">   * @param expire有效期, ms 单位
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span> <span style="color: rgba(0, 128, 0, 1)">   * @param merge 新旧数据是否合并
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span>      <span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)"> 8</span> <span style="color: rgba(0, 0, 0, 1)">    setStorageSync(key, v, expire, merge) {
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span>         const { __storage, __appKey } = <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">10</span>         <span style="color: rgba(0, 0, 255, 1)">var</span> str = merge ? { v: { ...{ v: <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.getStorageSync(key) }, ...{ v } } } : { v: { v } };
</span><span style="color: rgba(0, 128, 128, 1)">11</span>         <span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (expire) {
</span><span style="color: rgba(0, 128, 128, 1)">12</span>             str.t = Date.now() +<span style="color: rgba(0, 0, 0, 1)"> expire;
</span><span style="color: rgba(0, 128, 128, 1)">13</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">14</span>         __storage.setStorageSync(__appKey +<span style="color: rgba(0, 0, 0, 1)"> key.toString(), JSON.stringify(str));
</span><span style="color: rgba(0, 128, 128, 1)">15</span>   }</pre>
</div>
<p style="margin-left: 30px"><strong>第三步:</strong>获取数据</p>
<div class="cnblogs_code" style="margin-left: 30px">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span>   <span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span> <span style="color: rgba(0, 128, 0, 1)">   * 获取数据
</span><span style="color: rgba(0, 128, 128, 1)"> 3</span> <span style="color: rgba(0, 128, 0, 1)">   * @param key   键名
</span><span style="color: rgba(0, 128, 128, 1)"> 4</span> <span style="color: rgba(0, 128, 0, 1)">   * @returns   返回键值, 如果过期则为空
</span><span style="color: rgba(0, 128, 128, 1)"> 5</span>      <span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)"> 6</span> <span style="color: rgba(0, 0, 0, 1)">    getStorageSync(key) {
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span>         const { __storage, __appKey } = <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span>         const k = __appKey +<span style="color: rgba(0, 0, 0, 1)"> key.toString();
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span>         <span style="color: rgba(0, 0, 255, 1)">var</span> obj = __storage.getStorageSync(k) ?<span style="color: rgba(0, 0, 0, 1)"> JSON.parse(__storage.getStorageSync(k)) : undefined;
</span><span style="color: rgba(0, 128, 128, 1)">10</span>         <span style="color: rgba(0, 0, 255, 1)">if</span> (obj &amp;&amp; obj.t &amp;&amp; obj.t &lt;<span style="color: rgba(0, 0, 0, 1)"> Date.now()) {
</span><span style="color: rgba(0, 128, 128, 1)">11</span> <span style="color: rgba(0, 0, 0, 1)">            __storage.removeStorageSync(k);
</span><span style="color: rgba(0, 128, 128, 1)">12</span>             <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">13</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)">14</span>         <span style="color: rgba(0, 0, 255, 1)">return</span> obj &amp;&amp; obj.v &amp;&amp;<span style="color: rgba(0, 0, 0, 1)"> obj.v.v;
</span><span style="color: rgba(0, 128, 128, 1)">15</span>   }</pre>
</div>
<p style="margin-left: 30px">以上两步是主要的缓存类常用的方法,存取操作,下面两部将介绍删除方法</p>
<p style="margin-left: 30px"><strong>第四步:</strong>删除数据</p>
<p style="margin-left: 30px">根据指定的key值,删除指定的缓存数据</p>
<div class="cnblogs_code" style="margin-left: 30px">
<pre><span style="color: rgba(0, 128, 128, 1)">1</span>   <span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
</span><span style="color: rgba(0, 128, 128, 1)">2</span> <span style="color: rgba(0, 128, 0, 1)">   * 删除存储的数据
</span><span style="color: rgba(0, 128, 128, 1)">3</span> <span style="color: rgba(0, 128, 0, 1)">   * @param key
</span><span style="color: rgba(0, 128, 128, 1)">4</span>      <span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)">5</span> <span style="color: rgba(0, 0, 0, 1)">    removeStorageSync(key) {
</span><span style="color: rgba(0, 128, 128, 1)">6</span>         const { __storage, __appKey } = <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">7</span>         const k = __appKey +<span style="color: rgba(0, 0, 0, 1)"> key.toString();
</span><span style="color: rgba(0, 128, 128, 1)">8</span> <span style="color: rgba(0, 0, 0, 1)">      __storage.removeStorageSync(k);
</span><span style="color: rgba(0, 128, 128, 1)">9</span>   }</pre>
</div>
<p style="margin-left: 30px"><strong>第五步:</strong>清空所有缓存数据</p>
<div class="cnblogs_code" style="margin-left: 30px">
<pre><span style="color: rgba(0, 128, 128, 1)">1</span>   <span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
</span><span style="color: rgba(0, 128, 128, 1)">2</span> <span style="color: rgba(0, 128, 0, 1)">   * 清空数据
</span><span style="color: rgba(0, 128, 128, 1)">3</span>      <span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)">4</span> <span style="color: rgba(0, 0, 0, 1)">    clear() {
</span><span style="color: rgba(0, 128, 128, 1)">5</span>         const { __storage, __appKey } = <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">6</span>         Object.keys(__storage).forEach(k =&gt; k.indexOf(__appKey) === 0 &amp;&amp;<span style="color: rgba(0, 0, 0, 1)"> __storage.removeStorageSync(k));
</span><span style="color: rgba(0, 128, 128, 1)">7</span>   }</pre>
</div>
<p style="margin-left: 30px"><strong>第六步:</strong>完整代码storage.js</p>
<div class="cnblogs_code" style="margin-left: 30px">
<pre><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
*数据缓存类
* @author jackson影琪
* @date 2019-11-07
* @param appKey 用于存储数据时键名的前缀
* @param storage 本地存储或会话存储
*</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
export </span><span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(0, 0, 0, 1)"> class Storage {
    </span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
   * 数据缓存类构造方法
   * @param appKey 用于存储数据时键名的前缀
   * @param storage 本地存储或会话存储
   </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
    constructor(appKey, storage) {
      </span><span style="color: rgba(0, 0, 255, 1)">this</span>.__storage = storage ||<span style="color: rgba(0, 0, 0, 1)"> localStorage;
      </span><span style="color: rgba(0, 0, 255, 1)">this</span>.__appKey = appKey ? appKey + '-' : ''<span style="color: rgba(0, 0, 0, 1)">;
    }

    </span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
   * 存储数据
   * @param key   键名
   * @param v   键值
   * @param expire有效期, ms 单位
   * @param merge 新旧数据是否合并
   </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
    setStorageSync(key, v, expire, merge) {
      const { __storage, __appKey } </span>= <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">;
      </span><span style="color: rgba(0, 0, 255, 1)">var</span> str = merge ? { v: { ...{ v: <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.getStorageSync(key) }, ...{ v } } } : { v: { v } };
      </span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (expire) {
            str.t </span>= Date.now() +<span style="color: rgba(0, 0, 0, 1)"> expire;
      }
      __storage.setStorageSync(__appKey </span>+<span style="color: rgba(0, 0, 0, 1)"> key.toString(), JSON.stringify(str));
    }

    </span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
   * 获取数据
   * @param key   键名
   * @returns   返回键值, 如果过期则为空
   </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
    getStorageSync(key) {
      const { __storage, __appKey } </span>= <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">;
      const k </span>= __appKey +<span style="color: rgba(0, 0, 0, 1)"> key.toString();
      </span><span style="color: rgba(0, 0, 255, 1)">var</span> obj = __storage.getStorageSync(k) ?<span style="color: rgba(0, 0, 0, 1)"> JSON.parse(__storage.getStorageSync(k)) : undefined;
      </span><span style="color: rgba(0, 0, 255, 1)">if</span> (obj &amp;&amp; obj.t &amp;&amp; obj.t &lt;<span style="color: rgba(0, 0, 0, 1)"> Date.now()) {
            __storage.removeStorageSync(k);
            </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)">;
      }
      </span><span style="color: rgba(0, 0, 255, 1)">return</span> obj &amp;&amp; obj.v &amp;&amp;<span style="color: rgba(0, 0, 0, 1)"> obj.v.v;
    }

    </span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
   * 删除存储的数据
   * @param key
   </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
    removeStorageSync(key) {
      const { __storage, __appKey } </span>= <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">;
      const k </span>= __appKey +<span style="color: rgba(0, 0, 0, 1)"> key.toString();
      __storage.removeStorageSync(k);
    }

    </span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
   * 清空数据
   </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
    clear() {
      const { __storage, __appKey } </span>= <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">;
      Object.keys(__storage).forEach(k </span>=&gt; k.indexOf(__appKey) === 0 &amp;&amp;<span style="color: rgba(0, 0, 0, 1)"> __storage.removeStorageSync(k));
    }
}</span></pre>
</div>
<h2>三,缓存类调用</h2>
<p>常用有效期时间定义,可根据需求自动选择</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)">1</span> export const MINUTES: number = 60000<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">2</span> export const HOURS: number = 60 *<span style="color: rgba(0, 0, 0, 1)"> MINUTES;
</span><span style="color: rgba(0, 128, 128, 1)">3</span> export const DAY: number = 24 *<span style="color: rgba(0, 0, 0, 1)"> HOURS;
</span><span style="color: rgba(0, 128, 128, 1)">4</span> export const WEEK: number = 7 *<span style="color: rgba(0, 0, 0, 1)"> DAY;
</span><span style="color: rgba(0, 128, 128, 1)">5</span> export const MONTH: number = 30 * DAY;</pre>
</div>
<h3>3.1,web端调用(react,vue)</h3>
<p>在web端调用封装的类</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)">1</span> import Storage from '../utils/storage'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">2</span>
<span style="color: rgba(0, 128, 128, 1)">3</span> export const localCache = <span style="color: rgba(0, 0, 255, 1)">new</span> Storage('jackson'<span style="color: rgba(0, 0, 0, 1)">, window.localStorage);
</span><span style="color: rgba(0, 128, 128, 1)">4</span> export const sessionCache = <span style="color: rgba(0, 0, 255, 1)">new</span> Storage('jackson', window.sessionStorage);</pre>
</div>
<p>比如记住密码使用localCache;sessionCache的使用与localCache类似,WEEK设置记住用户密码的有效期为一周</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> import { localCache, WEEK } from './index'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span>
<span style="color: rgba(0, 128, 128, 1)"> 3</span> const KEY = 'loginRemember'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 4</span>
<span style="color: rgba(0, 128, 128, 1)"> 5</span> export <span style="color: rgba(0, 0, 255, 1)">default</span> <span style="color: rgba(0, 0, 255, 1)">function</span> cache(loginRemember) {<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">有参数 并且是有效的 则是存储,否则是获取</span>
<span style="color: rgba(0, 128, 128, 1)"> 6</span>   <span style="color: rgba(0, 0, 255, 1)">return</span> loginRemember ?<span style="color: rgba(0, 0, 0, 1)"> localCache.setItem(KEY, loginRemember, WEEK) : localCache.getItem(KEY);
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span> cache.clear = <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> () {
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span> <span style="color: rgba(0, 0, 0, 1)">localCache.removeItem(KEY);
</span><span style="color: rgba(0, 128, 128, 1)">10</span> };</pre>
</div>
<h3>3.2,uni-app调用(vue)</h3>
<p>在uni-app中调用封装的类</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)">1</span> import Storage from '../utils/storage'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">2</span>
<span style="color: rgba(0, 128, 128, 1)">3</span> const UniStorage: object =<span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">4</span> <span style="color: rgba(0, 0, 0, 1)">    setStorageSync: uni.setStorageSync,
</span><span style="color: rgba(0, 128, 128, 1)">5</span> <span style="color: rgba(0, 0, 0, 1)">    getStorageSync: uni.getStorageSync,
</span><span style="color: rgba(0, 128, 128, 1)">6</span> <span style="color: rgba(0, 0, 0, 1)">    removeStorageSync: uni.removeStorageSync,
</span><span style="color: rgba(0, 128, 128, 1)">7</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)">8</span> export const StorageSync: object = <span style="color: rgba(0, 0, 255, 1)">new</span> Storage('jackson', UniStorage);</pre>
</div>
<p>比如记住登陆的token</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> import { StorageSync, MINUTES } from './index'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span>
<span style="color: rgba(0, 128, 128, 1)"> 3</span> const KEY: string = 'setToken'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 4</span>
<span style="color: rgba(0, 128, 128, 1)"> 5</span> export <span style="color: rgba(0, 0, 255, 1)">default</span> <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> cache(setToken: any) {
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span>   <span style="color: rgba(0, 0, 255, 1)">return</span> setToken ?<span style="color: rgba(0, 0, 0, 1)"> (StorageSync as any).setStorageSync(KEY, setToken, MINUTES) : (StorageSync as any).getStorageSync(KEY);
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span> cache.clear = <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> () {
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span> <span style="color: rgba(0, 0, 0, 1)">    (StorageSync as any).removeStorageSync(KEY);
</span><span style="color: rgba(0, 128, 128, 1)">10</span> };</pre>
</div>
<h3>3.3,Taro调用(类react)</h3>
<p>taro的使用与uni-app类似</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)">1</span> import Taro from '@tarojs/taro'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">2</span> import Storage from '../utils/storage'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)">3</span>
<span style="color: rgba(0, 128, 128, 1)">4</span> const TaroStorage: object =<span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)">5</span> <span style="color: rgba(0, 0, 0, 1)">    setStorageSync: Taro.setStorageSync,
</span><span style="color: rgba(0, 128, 128, 1)">6</span> <span style="color: rgba(0, 0, 0, 1)">    getStorageSync: Taro.getStorageSync,
</span><span style="color: rgba(0, 128, 128, 1)">7</span> <span style="color: rgba(0, 0, 0, 1)">    removeStorageSync: Taro.removeStorageSync,
</span><span style="color: rgba(0, 128, 128, 1)">8</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)">9</span> export const StorageSync: object = <span style="color: rgba(0, 0, 255, 1)">new</span> Storage('jackson', TaroStorage);</pre>
</div>
<p>比如记住用户密码多久</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> import { StorageSync, MINUTES } from './index'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span>
<span style="color: rgba(0, 128, 128, 1)"> 3</span> const KEY: string = 'loginRemember'<span style="color: rgba(0, 0, 0, 1)">;
</span><span style="color: rgba(0, 128, 128, 1)"> 4</span>
<span style="color: rgba(0, 128, 128, 1)"> 5</span> export <span style="color: rgba(0, 0, 255, 1)">default</span> <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> cache(loginRemember: any) {
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span>   <span style="color: rgba(0, 0, 255, 1)">return</span> loginRemember ?<span style="color: rgba(0, 0, 0, 1)"> (StorageSync as any).setStorageSync(KEY, loginRemember, MINUTES) : (StorageSync as any).getStorageSync(KEY);
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span> cache.clear = <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> () {
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span> <span style="color: rgba(0, 0, 0, 1)">(StorageSync as any).removeStorageSync(KEY);
</span><span style="color: rgba(0, 128, 128, 1)">10</span> };</pre>
</div>
<p>以上缓存方法的调用皆是传参并且有效,表示是存储数据,否则是获取缓存的数据;调用clear则是清除数据</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)">1</span> loginRemember.clear();<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">清除指定的key的数据</span></pre>
</div>
<h3>下一章-&gt;待定</h3><br><br>
来源:https://www.cnblogs.com/jackson-yqj/p/11812543.html
頁: [1]
查看完整版本: uni-app,vue,react,Trao之缓存类封装