osgsm.io
HomeNotesJavaScript でローカルストレージを使ってユーザーが選択したモードなどを保存・取得する

JavaScript でローカルストレージを使ってユーザーが選択したモードなどを保存・取得する

Published Feb 19, 2025
Updated Mar 12, 2025

View モードの変更やダークモードの使用など、ウェブサイトやアプリケーション内でユーザーが選択したモードはローカルストレージに保存しておくと親切。

ここでは、 View モードの変更を例に、ローカルストレージの読み書きを行う方法を示す。

例えば、次のような <button> のマークアップがあるとする。

<button data-view="list">List</button>
<button data-view="grid">grid</button>

それぞれのボタンクリック時に該当のボタンの data-view 属性の値をローカルストレージにセットする。 localStorage.setItem() を使い、 'viewMode' というキーを持つ項目を追加する。

TypeScript
const triggers = container?.querySelectorAll('button');
 
triggers?.forEach((trigger) => {
  trigger.addEventListener('click', (event: MouseEvent) => {
    if (!(event.currentTarget instanceof HTMLButtonElement)) return;
    const nextView = event.currentTarget.dataset.view ?? 'list';
 
    localStorage.setItem('viewMode', nextView);
  });
});

これで、localStorage.getItem('viewMode') 使って、その値を取得できる。例えば、次のように、初回読み込み時にストアされている値を使ってコンテナーの dataset をセットすることができる。

const storedView = localStorage.getItem('viewMode');
 
if (storedView && container) {
  container.dataset.view = storedView;
}

以上で、ローカルストレージの読み書きはできるが、実際には、現在のモードのボタンに disabled を付与したり、ボタンクリック時にコンテナーの状態も変更しておく必要がある。

それらを含めたマークアップとスクリプトは次のようになる。

<button data-view="list" disabled>List</button>
<button data-view="grid">grid</button>
TypeScript
const storedView = localStorage.getItem('viewMode');
 
if (storedView && container) {
  container.dataset.view = storedView;
  triggers?.forEach((trigger) => {
    trigger.disabled = trigger.dataset.view === storedView;
  });
}
 
triggers?.forEach((trigger) => {
  trigger.addEventListener('click', (event: MouseEvent) => {
    if (!container || !(event.currentTarget instanceof HTMLButtonElement))
      return;
 
    const nextView = event.currentTarget.dataset.view ?? 'list';
 
    container.dataset.view = nextView;
 
    triggers.forEach((trigger) => {
      trigger.disabled = trigger.dataset.view === nextView;
    });
 
    localStorage.setItem('viewMode', nextView);
  });
});

参考