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

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

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ツリーの特性の紹介

推薦する

Vue は Tencent TIM インスタント メッセージングを統合します

この記事では主に、Tencent TIM インスタント メッセージングを Vue と統合する方法を紹...

複数の Tomcat を展開して起動し、プロジェクトを移行する方法を 1 つの記事で学習します。

目次tomcatをデプロイする1.ダウンロードして解凍する2. 設定ファイルを変更する移植プロジェク...

CSSはフロントエンドの画像変形の問題を完璧に解決します

Toutiao IT School で、CSS がフロントエンドの画像変形の問題を完璧に解決するとい...

CentOS8 システムをベースにした Gitlab を構築するために Docker を使用する詳細なチュートリアル

目次1. Dockerをインストールする2. GitLabをインストールする3. GitLabを初期...

docker+gitlab+gitlab-runnerの詳細なデプロイメント

環境サーバー: centos7クライアント: ウィンドウCentos7 に docker+gitla...

CentOS プラットフォーム上で LAMP 環境を素早く構築する方法

この記事では、例を使用して、CentOS プラットフォーム上で LAMP 環境を迅速に構築する方法に...

CentOS 8 に MySql をインストールしてリモート接続を許可する方法

ダウンロードしてインストールします。まず、システムに MySQL または MariaDB があるかど...

CSS3のfocus-withinセレクタの使用

擬似要素と擬似クラスところで、まずは疑似クラスセレクターと疑似要素セレクターについておさらいしておき...

React Native APPのアップデートに関する簡単な説明

目次アプリ更新プロセス大まかなフローチャートアプリ情報の更新1. まず取得する必要があるファイルアド...

TypeScript 3.7 で注目すべき 3 つの新機能について簡単に説明します。

目次序文オプションの連鎖ヌル結合呼び出されていない関数のチェック他の序文TypeScript 3.7...

内部 IP アクセスのみを許可する Nginx プロキシ設定を追加する方法

位置 / { インデックス index.jsp; proxy_next_upstream http...

JSパッケージオブジェクトに関する簡単な説明

目次概要意味インスタンスメソッドプリミティブ型とインスタンスオブジェクト間の自動変換カスタムメソッド...

HTML+JS に基づくシンプルな年齢計算ツールの実装

目次序文デモンストレーション効果HTMLコードCSSコードJavascriptコードデモアドレス序文...

CocosCreatorがスキル冷却効果を実装

CocosCreatorがスキルCD効果を実現多くのゲームにはスキルがあります。プレイヤーがスキルボ...

MySQL innodb_autoinc_lock_mode について

innodb_autoinc_lock_mode パラメータは、auto_increment 列を持...