> 웹 프론트엔드 > JS 튜토리얼 > useCookie Hook을 사용하여 React에서 브라우저 쿠키 관리

useCookie Hook을 사용하여 React에서 브라우저 쿠키 관리

Barbara Streisand
풀어 주다: 2025-01-27 16:40:09
원래의
348명이 탐색했습니다.

Managing Browser Cookies in React with useCookie Hook

이 기사에서는 브라우저 쿠키 관리를 간소화하기 위해 사용자 정의 React 후크 useCookie를 구축하는 방법을 보여줍니다. 브라우저 쿠키는 세션 또는 애플리케이션 섹션 전반에 걸쳐 지속적인 데이터를 저장하는 간단한 방법을 제공합니다.


1. 쿠키 유틸리티 기능

후크를 생성하기 전에 일반적인 쿠키 작업(쿠키 설정, 검색 및 제거)에 대한 도우미 함수를 정의합니다.


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>
로그인 후 복사
로그인 후 복사
  • 기능: 키, 값 및 선택적 만료를 허용합니다(기본값은 1일). 만료 날짜를 계산하고 이에 따라 쿠키를 설정합니다.
  • 예: setCookie("theme", "dark", 7); // 7일 동안 지속되는 쿠키를 설정합니다

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"); // "테마" 값을 검색합니다

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"); // "테마" 쿠키 삭제

2. useCookie

useCookie 후크는 구성 요소 내에서 우아한 쿠키 관리를 위해 React의 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>
로그인 후 복사
  • 메커니즘: 직접적인 값 업데이트와 기능 업데이트(상태 변환용)를 모두 처리합니다. 쿠키 동기화를 보장합니다.

상태 정리

clearState 함수는 쿠키를 제거하고 상태를 재설정합니다.

<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으로 설정합니다.

Hook API 반환

후크는 현재 값, 디스패처 함수, 지우기 함수 등의 배열을 반환합니다.

<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>
로그인 후 복사
로그인 후 복사

3. useCookie

사용하기

React 구성 요소의 사용 예:

<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은 쿠키에 저장되고 세션 전반에 걸쳐 지속되며 동기적으로 업데이트됩니다. clearTheme 쿠키를 제거하고 상태를 재설정합니다.

4. useCookie후크

의 장점
  • 단순화된 쿠키 관리: 쿠키 ​​논리를 캡슐화합니다.
  • 상태 동기화: React 상태와 쿠키를 동기화 상태로 유지합니다.
  • 오류 처리: 쿠키를 디코딩하고 처리하는 메커니즘을 포함합니다.

결론

useCookie 후크는 React에서 쿠키 관리를 단순화하여 유형 안전성과 깔끔한 ​​코드를 촉진합니다. 쿠키 기반 상태 관리를 간소화하여 반복적인 코드를 제거합니다.

위 내용은 useCookie Hook을 사용하여 React에서 브라우저 쿠키 관리의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿