この記事では、合理化されたブラウザクッキー管理用のカスタムReactフック
の構築を示しています。 ブラウザクッキーは、セッションまたはアプリケーションセクション全体に永続的なデータを保存するための簡単な方法を提供します。
useCookie
フックを作成する前に、一般的なCookie操作のヘルパー関数を定義します。クッキーの設定、取得、削除。
:Cookieの設定または更新setCookie
<code class="language-typescript">export function setCookie(key: string, value: unknown, expireDays = 1): void { const d = new Date(); d.setTime(d.getTime() + expireDays * 24 * 60 * 60 * 1000); document.cookie = `${key}=${value}; expires=${d.toUTCString()}; path=/`; }</code>
setCookie("theme", "dark", 7);
:Cookie値を取得getCookie
メカニズム:、それを配列に分割し、指定されたキーを検索します。 値または
。<code class="language-typescript">export function getCookie(key: string): string | undefined { const name = `${key}=`; const decodedCookie = decodeURIComponent(document.cookie); const ca = decodedCookie.split(";"); for (let i = 0; i < ca.length; i++) { let c = ca[i]; while (c.charAt(0) === " ") { c = c.substring(1); } if (c.indexOf(name) === 0) { return c.substring(name.length, c.length); } } return undefined; }</code>
document.cookie
undefined
const theme = getCookie("theme");
この関数は、空の値と有効期限なしで上書きすることにより、Cookieを削除します。
removeCookie
を削除します
<code class="language-typescript">export function removeCookie(key: string): void { document.cookie = `${key}=; path=/; expires=Thu, 01 Jan 1970 00:00:00 UTC;`; }</code>
removeCookie("theme");
とコンポーネント内のエレガントなクッキー管理に統合します。
useCookie
フックの初期化
useCookie
useState
パラメーター:
<code class="language-typescript">import { useState } from "react"; import { getCookie, setCookie, removeCookie } from "@/utils/cookie"; export default function useCookie<T>(key: string, initialValue: T): [T | undefined, (action: T | ((prevState: T) => T)) => void, () => void] { const [value, setValue] = useState(() => getCookie(key) as T || initialValue); // ...rest of the hook implementation }</code>
key
initialValue
状態の変更を派遣しますinitialValue
状態のクリアhandleDispatch
<code class="language-typescript"> const handleDispatch = (action: T | ((prevState: T) => T)) => { if (typeof action === "function") { setValue((prevState) => { const newValue = (action as (prevState: T) => T)(prevState); setCookie(key, newValue); return newValue; }); } else { setValue(action); setCookie(key, action); } };</code>
<code class="language-typescript">export function setCookie(key: string, value: unknown, expireDays = 1): void { const d = new Date(); d.setTime(d.getTime() + expireDays * 24 * 60 * 60 * 1000); document.cookie = `${key}=${value}; expires=${d.toUTCString()}; path=/`; }</code>
undefined
。
<code class="language-typescript">export function getCookie(key: string): string | undefined { const name = `${key}=`; const decodedCookie = decodeURIComponent(document.cookie); const ca = decodedCookie.split(";"); for (let i = 0; i < ca.length; i++) { let c = ca[i]; while (c.charAt(0) === " ") { c = c.substring(1); } if (c.indexOf(name) === 0) { return c.substring(name.length, c.length); } } return undefined; }</code>
hook useCookie
を使用します
反応成分での使用の例:
<code class="language-typescript">export function removeCookie(key: string): void { document.cookie = `${key}=; path=/; expires=Thu, 01 Jan 1970 00:00:00 UTC;`; }</code>
theme
Cookieを削除して状態をリセットします
clearTheme
フックの利点useCookie
フックは、反応のクッキー管理を簡素化し、タイプの安全性とクリーンコードを促進します。 Cookieベースの州管理を合理化し、繰り返しコードを排除します
以上がReact で useCookie フックを使用してブラウザー Cookie を管理するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。