ローカルストレージにブール型の値を保存する際の落とし穴を解決する

ローカルストレージにブール型の値を保存する際の落とし穴を解決する

LocalStorageはブール値を保存します

今日、ブール値データを保存するために localstorage を使用したところ、ページにデータを表示する方法に問題があることがわかりました。

その後、ローカルストレージに保存されたブールデータが文字列に変換され、この問題が発生したことがわかりました。

したがって、「true」=true、「false」==false、「true」==false は両方とも false として表示されます。

ローカルストレージを厳密に使用しないことの落とし穴

新しいバージョンをリリースした後、ごく少数の「古い」ユーザーが WeChat ブラウザで当社 Web サイトのホームページを開けないことが判明しました。オンラインファイルプロキシの後

変更した後、ようやく問題が見つかりました。

問題コードスニペット:

ローカルストレージの getItem("物") の場合
    var things = localstorage.getItem("things");
    物を使う
    // 一度使用したらキャッシュを削除します。localstorage.removeItem('things');
}それ以外{
    新しいデータを使用します。
}

このコードは一見問題ないように見えるかもしれませんが、隠れた危険が潜んでいます。旧バージョンでは、localstorage に保存される内容は次のようになります。

{
    名前:'px',
    年齢:'25'
}

ただし、新しいバージョンでは、需要の問題により、このキャッシュの値は次の構造に変更されました。

{
    ユーザー名:'px',
    年齢:'25'
}

これにより、use 関数を使用して処理するときにエラーが発生し、後続の removeItem が実行されなくなるため、コード内でキャッシュされたデータがクリアされず、use 関数は常に古いデータをレンダリングに使用するため、エラーが発生し、新しいデータが使用できなくなります。

改善すべき点が2つあります

* キャッシュにバージョン番号を追加する * 変数を使用してキャッシュを読み込んだ後、すぐにキャッシュをクリアする

最適化されたコードは次のとおりです。

//まずキャッシュのバージョン番号を決定します if (localstorage.getItem ("version") == curVersion) {
    localstorage.getItem("things") の場合
        var things = localstorage.getItem("things");
        //すぐにクリアします localstorage.removeItem('things');
        物を使う
    }それ以外{
        使用(新しいデータ);
    }
}それ以外{
    localstorage.removeItem('物');
    使用(新しいデータ);
}

上記は私の個人的な経験です。参考になれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • ローカルストレージの使用に関する詳細な説明
  • JavaScriptはlocalStorageを使用してデータを保存します
  • Vue で localStorage を使用してデータを保存する方法

<<:  CentOS 8/RHEL 8 に Cockpit をインストールして使用する方法

>>:  Bツリーの特性の紹介

推薦する

Nginx でファイル ホットリンク保護サービスを構築する方法を学ぶ例

序文多くのサイトが、ポイントやゴールドコインなど、情報のダウンロードに料金を請求していることは誰もが...

MySQL共通インデックスとユニークインデックスの詳細な説明

シナリオ1. ID番号のフィールドを備えた市民システムを維持する2. ビジネス コードでは、重複する...

jsは配列の平坦化を実装します

目次配列をフラット化する方法1.flat() の使用2. 正規表現を使用する3.reduce()+c...

MySQLデータの重複チェックと重複排除の実装ステートメント

テーブル user があり、フィールドは id、nick_name、password、email、p...

React ページ ターナーの実装 (フロント エンドとバックエンドを含む)

目次フロントエンド上記のアイデアに従って、ページめくり機能を設計して記述します。バックエンド(Jav...

各グループの最新データを取得するためにMySQLベースのグループを実装する

序文:グループ化関数はグループ内の最初のデータを取得しますが、各グループ内の最新のデータを取得する必...

docker で php+nginx+swoole+mysql+redis 環境を構築する方法

オペレーティングシステム: Alibaba Cloud ESC インスタンス centos7.4ソフ...

TypeScriptのインストールと使用方法と基本的なデータ型

最初のステップはTypeScriptをグローバルにインストールすることですnpmを使用してインストー...

MySQL での大規模トランザクションによって発生する挿入の遅延ケースの分析

【質問】 INSERT 文は最も一般的な SQL 文の 1 つです。最近、MySQL サーバーが同時...

Webpack でよく使われる 12 個の Loader を共有する (要約)

目次序文スタイルローダーCSSローダーsassローダーpostcssローダーバベルローダーtsローダ...

CSS 位置固定左と右の二重配置実装コード

CSS 位置position 属性は、要素の配置タイプを指定します。位置プロパティには 5 つの値が...

MySQL 5.7.24 圧縮パッケージのインストールと設定方法のグラフィックチュートリアル

この記事では、参考までにMySQL 5.7.24圧縮パッケージのインストールチュートリアルを紹介しま...

JavaScript による省・市連携効果の実現

この記事では、省と都市間の連携効果を実現するためのJavaScriptの具体的なコードを参考までに共...

CSS3 タブアニメーションの例 背景切り替えの動的効果

CSS 3 アニメーションの例 - タブの背景切り替えの動的効果、具体的なコードは次のとおりです。 ...

VMware 仮想マシンに CentOS と Qt をインストールするチュートリアル図

VMware のインストールパッケージのインストールダウンロードアドレス: https://www....