usePageTitle

Introduction

์ด ํ›…์€ React ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํŽ˜์ด์ง€์˜ document.title์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ํ›…์„ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ์˜ ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์ฝ”๋“œ ์ค‘๋ณต ์ตœ์†Œํ™”: ํŽ˜์ด์ง€ ์ œ๋ชฉ์„ ๋ณ€๊ฒฝํ•˜๋Š” ๋กœ์ง์ด ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ์— ํ•„์š”ํ•  ๋•Œ, ํ•ด๋‹น ๋กœ์ง์„ ์—ฌ๋Ÿฌ ๋ฒˆ ๋ฐ˜๋ณตํ•˜์ง€ ์•Š๊ณ  ์ปค์Šคํ…€ ํ›…์— ๋‹ด์•„ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  2. ์ผ๊ด€์„ฑ ์œ ์ง€: ํŽ˜์ด์ง€ ์ œ๋ชฉ ๋ณ€๊ฒฝ ๋กœ์ง์ด ์ปค์Šคํ…€ ํ›… ๋‚ด์— ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ์—์„œ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ํŽ˜์ด์ง€ ์ œ๋ชฉ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์–ด ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  3. ์œ ์ง€๋ณด์ˆ˜ ์šฉ์ด์„ฑ: ํŽ˜์ด์ง€ ์ œ๋ชฉ ๋ณ€๊ฒฝ ๋กœ์ง์ด ํ•˜๋‚˜์˜ ํ›…์— ์ง‘์ค‘๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์ด ํ›… ๋‚ด์˜ ๋กœ์ง์„ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ๊ฐœ์„ ํ•  ๋•Œ ๋ชจ๋“  ์‚ฌ์šฉ ์ง€์ ์— ๋™์ผํ•œ ๋ณ€๊ฒฝ์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

  4. ์•ˆ์ •์„ฑ ๊ฐ•ํ™”: console.assert๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์ž…๋ ฅ์ด๋‚˜ ์˜ค๋ฅ˜์— ๋Œ€ํ•œ ๊ฒฝ๊ณ ๋ฅผ ์ถ”๊ฐ€ํ•จ์œผ๋กœ์จ ์•ˆ์ •์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Example

import React from "react";

function MyApp() {
  // usePageTitle ํ›…์„ ์‚ฌ์šฉํ•˜์—ฌ ํŽ˜์ด์ง€ ์ œ๋ชฉ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜๋ฅผ ๋ฐ›์•„์˜ด
  const { handleChangePageTitle } = usePageTitle();

  // ํŽ˜์ด์ง€๊ฐ€ ๋กœ๋“œ๋  ๋•Œ "My App"์ด๋ผ๋Š” ๊ธฐ๋ณธ ์ œ๋ชฉ์œผ๋กœ ์„ค์ •
  React.useEffect(() => {
    handleChangePageTitle("My App");
  }, [handleChangePageTitle]);

  // ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ํŽ˜์ด์ง€ ์ œ๋ชฉ์„ ๋ณ€๊ฒฝ
  const handleTitleChange = () => {
    handleChangePageTitle("New Page Title");
  };

  return (
    <div>
      <h1>{document.title}</h1>
      <button onClick={handleTitleChange}>Change Page Title</button>
    </div>
  );
}

export default MyApp;

์ด Example ์ฝ”๋“œ์—์„œ๋Š” usePageTitle ํ›…์„ ์‚ฌ์šฉํ•˜์—ฌ ํŽ˜์ด์ง€ ์ œ๋ชฉ์„ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฐ„๋‹จํ•œ React ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ํŽ˜์ด์ง€๊ฐ€ ์ฒ˜์Œ ๋กœ๋“œ๋  ๋•Œ ๊ธฐ๋ณธ ์ œ๋ชฉ์ธ "My App"์œผ๋กœ ์‹œ์ž‘ํ•˜๊ณ , ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด ํŽ˜์ด์ง€ ์ œ๋ชฉ์ด "New Page Title"๋กœ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค. ์ด๋•Œ usePageTitle ํ›…์ด ๋‚ด๋ถ€์ ์œผ๋กœ document.title์„ ์กฐ์ž‘ํ•˜์—ฌ ํŽ˜์ด์ง€ ์ œ๋ชฉ์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

Hook

์ด ํ›…์€ ํŽ˜์ด์ง€ ์ œ๋ชฉ์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์ปค์Šคํ…€ React ํ›…์ธ usePageTitle์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. titleToTransform (์„ค์ •ํ•  ์ œ๋ชฉ)๊ณผ defaultTitle (์ œ๊ณต๋˜์ง€ ์•Š์•˜์„ ๋•Œ ์‚ฌ์šฉํ•  ๊ธฐ๋ณธ ์ œ๋ชฉ) ๋‘ ๊ฐ€์ง€ ์„ ํƒ์  ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค. ํ›…์€ handleChangePageTitle ํ•จ์ˆ˜๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ, ์ด ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŽ˜์ด์ง€ ์ œ๋ชฉ์„ ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

useEffect๋Š” ๋งˆ์šดํŠธ ์‹œ ์ดˆ๊ธฐ ์ œ๋ชฉ์„ ์„ค์ •ํ•˜๊ณ  ์–ธ๋งˆ์šดํŠธ ์‹œ ์ œ๋ชฉ์„ ์ดˆ๊ธฐํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ฝ˜์†” ์–ด์„œ์…˜์€ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์ž…๋ ฅ์ด๋‚˜ ๋ˆ„๋ฝ๋œ ๊ฐ’์— ๋Œ€ํ•œ ์˜ค๋ฅ˜ ํ™•์ธ์„ ์ œ๊ณตํ•˜๋ฉฐ, ๊ฐ ์ฝ”๋“œ ๋ถ€๋ถ„์˜ ๋ชฉ์ ๊ณผ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์„ค๋ช…์ด ์ฃผ์„์œผ๋กœ ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค.

Last updated