1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

React × Local Storage で本文と履歴を管理する

Posted at

ユーザーがコピペした情報内に、曖昧な表現があった場合ハイライトして教えてくれるアプリを作成中、Local Storage を使用したのでメモを残しておきます。

Local Storage とは

WEB APIの一種で、ユーザーの端末にデータを保存でき、ページをリロードしても保持されます。
ログイン情報や一時的な設定保持など、ちょっとした永続化に便利です。

Local Storage 基本構文

保存

// setItem(key, value) で保存
localStorage.setItem('key', 'value');

取得

// getItem(key) で取得
const value1 = localStorage.getItem('key');

保存していた 'value' が返ってきます。

削除

// 指定した key だけ削除
localStorage.removeItem('key');

// 保存されている全データを削除
localStorage.clear();

イメージ

// 保存
localStorage.setItem('a', 'aaa');
localStorage.setItem('b', 'bbb');

console.log(localStorage.getItem('a')); // "aaa"
console.log(localStorage.getItem('b')); // "bbb"

// aだけ削除
localStorage.removeItem('a');
console.log(localStorage.getItem('a')); // null
console.log(localStorage.getItem('b')); // "bbb"

// 全部削除
localStorage.clear();
console.log(localStorage.getItem('b')); // null

本文を保存する

本文はエディタ入力後に「チェック」ボタンを押したタイミングで localStorage に保存します。
キー名は固定で、クリア時に削除します。

const STORAGE_KEY = "aimai__lastContent";
const [content, setContent] = useState(() => localStorage.getItem(STORAGE_KEY) ?? "");

// チェック時
localStorage.setItem(STORAGE_KEY, content);

// クリア時
localStorage.removeItem(STORAGE_KEY);

履歴を保存する & 削除する

チェック実行ごとに「文字数・検出件数・処理時間」などを履歴として localStorage に追加します。

export type RunHistory = {
  ts: number;
  length: number;
  count: number;
  ms: number;
  topWords: string[];
};

// チェックした履歴を保存する
export function pushHistory(r: RunHistory): RunHistory[] {
  const key = "aimai__history";
  const prev = loadHistory();
  const next = [r, ...prev].slice(0, 20); // 最大20件保持
  localStorage.setItem(key, JSON.stringify(next));
  return next;
}

// 読み込み
export function loadHistory(): RunHistory[] {
  try {
    return JSON.parse(localStorage.getItem("aimai__history") ?? "[]");
  } catch {
    return [];
  }
}

// local Storage の履歴を削除する
export function clearHistory() {
  localStorage.removeItem("aimai__history");
}

挙動まとめ

  • 本文は「チェック」で保存、「クリア」で削除
  • 履歴は「チェック」で追記、「履歴削除」で全件削除

Local Storageのメリット

メリットを挙げるなら、こんな感じでしょうか。

  • DBやサーバー不要で簡単にデータを残せる
  • ブラウザだけで完結する
  • ページリロードやブラウザ再起動後もデータが保持される
  • 実装がシンプル(getItem / setItem / removeItem のみ)

実装がシンプルって、めっちゃありがたい。。。

Local Storageのデメリット

  • 暗号化されずJSから読み取り可能なためセキュリティに弱い
  • 同じユーザーが別端末からアクセスしても同期されない

保存容量が少なのもありますが、これはデメリットではないですね。

まとめ

localStorage を使えば、DB をまだ用意していない段階でも「直近の入力内容や履歴」をブラウザに残せます。
注意点として、データは削除しない限り残り続けるので、クリアボタンや削除処理を用意する必要があります。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?