JavaScriptのLocalStorageを使用する正しい方法


Web開発者として、我々はすべての状況に、我々はユーザーのデータ、テーマの好み、または選択されたフィルタのような情報の一部を保持したい、ブラウザのセッション間で一貫した経験をユーザーに与えるためにされている.
さて、それは正確にLocalStorage APIが画像に入っているところです.

ホールドオン、ホールド!基本から始めましょう

LocalStorageとは


ウェブブラウザのLocalStorage APIは、ブラウザセッションを通して格納されたデータを保存して、読むことができます.
それを壊しましょう
  • 私たちがブラウザまたはコンピュータさえ再開するとき、データがまだ利用できるように、それは永続的なメモリにデータを保存するのを許します.
  • はそのデータにローカルにデータを格納します.そして、あなたが現在の起源I . EのためにLocalStorageにデータを読む/書くだけであることができるということを意味します

    It is to be noted that the LocalStorage starts empty and the items added during a private session get cleared as soon as the last private tab is closed.


    LocalStorageの内部


    LocalStorageはキー値ストアです.これは、JavaScriptオブジェクトと同じように指定された値に対して指定された値を格納しますが、永続的です.
    キー値のストアは、高速ルックアップを提供し、その構造のため、右の要素は常に一定の時間(私は/oを行うには時間から離れてかかる)を見つけるために書き込みます.これは、あなたのLocalStorageの何百ものキーを持つことがルックアップを遅くしないことを意味します.(なぜあなたがそんなことをするのかわかりません)
    その速度で、1つの制限、keyvalueの両方がlocalstorageに格納されるストリングでなければなりません.
    さて、これはあまり難しくはない.

    Currently the Web Storage specification allows you to store up to 5MB per app per browser.


    LocalStorageを使う方法?


    ありがたいことに、localstorage APIはかなり簡単にインターフェイスを使用します.
    次のようにして、LocalStorageのCREATE/READ/UPDATE/DELETEのような基本的な操作を行う方法を見てみましょう.

    データの書き込み

    localStorage.setItem()keyとしてストリングを受け入れます、そして、valueもストリングと認められます.
        localStorage.setItem('<key>', '<value>')
    
    上記のコード行は、指定されたキーに対して値を書き込みます.既に存在する場合は、既存の値が上書きされます.

    データの読み込み


    格納された情報を読むには、keyを提供する必要があります
      const value = localStorage.getItem('<key>')
      // value will be null or string
    
    指定されたnullでデータが見つからなかった場合、keyが返されます.

    LocalStorage内のオブジェクトの保存


    あなたは不思議に思うかもしれません、「文字列!心配するな.
    まだオブジェクトのシリアル化されたバージョンを保存することができます.
        // storing an object in LocalStorage
        const user = { name: 'anshuman_bhardwaj' }
        localStorage.setItem('user', JSON.stringify(user))
    
        // reading the object from LocalStorage
        const strinifiedUser = localStorage.getItem('user')
        if(strinifiedUser) {
          const retrivedUser = JSON.parse(strinifiedUser)
        }
    

    データの削除


    LocalStorageから格納されたデータをプログラム的に除去する2つの方法があります

    リモコン


    あなたは既に削除する項目を知っている場合は、removeItem行く方法です.
        localStorage.removeItem('<key>')
    

    クリア


    ストレージからすべてのキーを削除する場合は、clearは明確な選択です.(私がそこで何をしたかわかりますか?)
        localStorage.clear()
    
    それが聞こえるかもしれないようにエキサイティングなので、それがすべてをクリアするだけではなく、あなたが追加した項目ではないので、clearメソッドはすべてそんなにそれを使用すべきではない.
    これは、localStorageなどの認証モジュールを使用するサービスと相互作用している場合、localStorageをクリアすると、それらのサービスが入れたデータを削除し、動作を中断します.

    はい、心配しないで、私はあなたを得た.
    コンピュータサイエンスでは、カプセル化に焦点を当てるべきです.つまり、情報を隠したり、カプセル化したりする必要があります.さて、それは我々がここで我々の小さな問題を解決する方法です.

    The following pattern was suggested to me by my friend & colleague .


    LocalStorage内の名前空間の作成と使用


    我々は、定義済みのユニークなキーまたは名前空間の下にすべてのデータを置くことによって、ここでカプセル化の原則を適用することができます.これは私たちがアプリケーションの他の部分(私たちがコントロールしていない)から私たちを隠すことができますまた、誤って我々はすべきではないデータを更新から私たちを保存します.
    「いいですね、どうやってやるの?」あなたは不思議かもしれない.
    よく、それは音より簡単です、そして、各々の情報のために新しいキーを使用するよりむしろ一つのキーの下で全アプリケーション状態を囲むことによって、働きます.

    ステップ1


    キー、予測可能なまだユニークな作成します.良い例は[あなたのアプリケーション名]+ [いくつかのユニークなトークン]すなわちDEV - 007です

    ステップ2


    情報を格納している間、localstorageから名前空間値を読んで、それを逆シリアル化し、オブジェクト内のキーに対して値を更新し、次にLocalStorageに書き込む前に再度シリアル化します.

    ステップ3


    情報を読み込みながら、LocalStorageから名前空間値を読み取り、それを逆シリアル化し、オブジェクトのキーの値を返します.

    This way we treat the namespace like it's own little LocalStorage.


    以下は上記のコード実装です
    const NAMESPACE = "DEV-007";
    
    function writeToStorage(key, value) {
      const serializedData = localStorage.getItem(NAMESPACE);
      const data = serializedData ? JSON.parse(serializedData) : {};
      data[key] = value;
      localStorage.setItem(NAMESPACE, JSON.stringify(data));
    }
    
    function readFromStorage(key) {
      const serializedData = localStorage.getItem(NAMESPACE);
      const data = JSON.parse(serializedData);
      return data ? data[key] : undefined;
    }
    
    function clear() {
      localStorage.setItem(NAMESPACE, JSON.stringify({}));
    }
    
    function removeItem(key) {
      const serializedData = localStorage.getItem(NAMESPACE);
      const data = serializedData ? JSON.parse(serializedData) : {};
      delete data[key]
      localStorage.setItem(NAMESPACE, JSON.stringify(data));
    }
    
    clearremoveItemの上記の実装は、我々の問題を使用して、解決するのに安全です.
    上記の問題を解決して、よりスマートなlocalstorageを提供するNPMパッケージstore2が存在するので、あなたがあなた自身の実装を書かなければならないことを心配しないでください.

    今日はこれで終わりです.任意の質問や提案をしてください以下のコメントでそれらを削除する自由を感じてください.
    そのような内容のために

    Until next time