import React from "react";
/**
* ํ์ด์ง ์ ๋ชฉ์ ๊ด๋ฆฌํ๊ธฐ ์ํ ์ปค์คํ
React ํ
์
๋๋ค.
*
* @param {string} titleToTransform - ํ์ด์ง ์ ๋ชฉ์ผ๋ก ์ค์ ํ ๋ฌธ์์ด์
๋๋ค.
* @param {string} defaultTitle - ์ ๋ชฉ์ด ์ ๊ณต๋์ง ์์์ ๋ ์ฌ์ฉํ ๊ธฐ๋ณธ ์ ๋ชฉ์
๋๋ค.
* @returns {Object} handleChangePageTitle ํจ์๋ฅผ ํฌํจํ๋ ๊ฐ์ฒด์
๋๋ค.
*/
export default function usePageTitle(titleToTransform: string = "", defaultTitle: string = "My App") {
/**
* ํ์ด์ง ์ ๋ชฉ์ ๋ณ๊ฒฝํ๊ณ ์ฝ์ ์ด์์
์ ์ฒ๋ฆฌํ๋ ํจ์์
๋๋ค.
*
* @param {string} title - ํ์ด์ง ์ ๋ชฉ์ผ๋ก ์ค์ ํ ๋ฌธ์์ด์
๋๋ค.
*/
const handleChangePageTitle = (title: string) => {
console.assert(!!title, `๊ฒฐ๊ณผ ์คํจ : title์๋ ${title}์ด ์
๋ ฅ๋์ด ๊ธฐ๋ณธ title๋ก ${defaultTitle}์ด ์ค์ ๋์์ต๋๋ค.`);
if (!title) return (document.title = "defaultTitle");
return (document.title = title);
};
// useEffect๋ฅผ ์ฌ์ฉํ์ฌ ์ด๊ธฐ ์ ๋ชฉ์ ์ค์ ํ๊ณ ์ธ๋ง์ดํธ ์ ์ ๋ฆฌํฉ๋๋ค.
React.useEffect(() => {
console.assert(!!titleToTransform, "๊ฒฐ๊ณผ ์คํจ : ๋ณ๊ฒฝํ title์ ๊ฐ์ด ์
๋ ฅ๋์ง ์์์ต๋๋ค.");
if (!titleToTransform) return;
document.title = titleToTransform;
// ์ธ๋ง์ดํธ ์ ์ ๋ชฉ์ ์ด๊ธฐํํ๋ ์ ๋ฆฌ ํจ์์
๋๋ค.
return () => {
console.assert(!!defaultTitle, "์ ๋ฆฌ๋ฅผ ์ํ defaultTitle์ด ์ ๊ณต๋์ง ์์์ต๋๋ค.");
document.title = defaultTitle;
};
}, []); // ๋น ์์กด์ฑ ๋ฐฐ์ด์ useEffect๊ฐ ๋ง์ดํธ ์์๋ง ์คํ๋๋๋ก ๋ณด์ฅํฉ๋๋ค.
// handleChangePageTitle ํจ์๋ฅผ ๋ฐํํฉ๋๋ค.
return { handleChangePageTitle };
}