React

[React] ๋ฆฌ์•กํŠธ ํ›…์Šค(3) - useLocation, useNaviation

์ดํƒœํ™ 2024. 2. 26. 23:36

๐Ÿš— useLocation

๋ฆฌ์•กํŠธ ํ›…์Šค์—์„œ useLocation์€ ํ˜„์žฌ์˜ URL์„ ๋Œ€ํ‘œํ•˜๋Š” location ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

์ด์ „ ๋ธ”๋กœ๊ทธ์—์„œ ํ™•์ธํ–ˆ๋˜ ๊ฒƒ๊ณผ ๊ฐ™์ด URL์ด ๋ฐ”๋€” ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด location์„ ๋ฐ˜ํ™˜ํ•˜๋Š” useState์ฒ˜๋Ÿผ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ƒˆ๋กœ์šด ํŽ˜์ด์ง€๊ฐ€ ๋กœ๋“œ๋  ๋•Œ๋งˆ๋‹ค web analytics tool(์›น ๋ถ„์„ ๋„๊ตฌ)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ƒˆ๋กœ์šด "ํŽ˜์ด์ง€ ๋ชจ์Šต"์˜ ์ด๋ฒคํŠธ๋ฅผ ์ž‘๋™์‹œํ‚ค๋ ค๋Š” ์ƒํ™ฉ์—์„œ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ด๋•Œ location ๊ฐ์ฒด๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

[Chat GPT]

  • pathname: URL์—์„œ ๋„๋ฉ”์ธ ๋’ค์˜ ๊ฒฝ๋กœ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, URL์ด http://example.com/about์ธ ๊ฒฝ์šฐ, pathname์€ /about์ด ๋ฉ๋‹ˆ๋‹ค.
  • search: URL์˜ ์ฟผ๋ฆฌ ์ŠคํŠธ๋ง์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, http://example.com/about?name=John&age=30์˜ ๊ฒฝ์šฐ, search๋Š” ?name=John&age=30์ด ๋ฉ๋‹ˆ๋‹ค.
  • hash: URL์˜ ํ•ด์‹œ(fragment) ๋ถ€๋ถ„์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, http://example.com/about#team์˜ ๊ฒฝ์šฐ, hash๋Š” #team์ด ๋ฉ๋‹ˆ๋‹ค.
  • state: ํŽ˜์ด์ง€๋กœ์˜ ์ด๋™ ์‹œ์— Link๋‚˜ navigate ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ „๋‹ฌ๋œ ์ƒํƒœ(state)๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ด๋Š” ํŽ˜์ด์ง€ ์ด๋™ ์‹œ ์ถ”๊ฐ€์ ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๊ณ ์ž ํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. state๋Š” ์–ด๋–ค JavaScript ๊ฐ์ฒด๋„ ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋™ํ•œ ํŽ˜์ด์ง€์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ฆ‰, ํ˜„์žฌ ๋ธŒ๋ผ์šฐ์ €์˜ URL์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ํฌํ•จํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

์ด ๊ฐ์ฒด๋Š” ๊ฒฝ๋กœ(pathname), ๊ฒ€์ƒ‰ ์ฟผ๋ฆฌ(search), ์ƒํƒœ(state), ํ•ด์‹œ(hash)๋“ฑ์˜ ์†์„ฑ์„ ํฌํ•จํ•œ๋‹ค.

 

useLocateํ›…์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” React Router์—์„œ ์ด๋ฅผ ์ž„ํฌํŠธ ํ•ด์•ผํ•œ๋‹ค.

 

import { useLocation } from 'react-router-dom';

 

location๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ˜„์žฌ ๋ธŒ๋ผ์šฐ์ €์˜ ๊ฒฝ๋กœ๋ฅผ ์–ป์–ด์˜ค๊ธฐ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

 

const location = useLocation();

const path = location.pathname;

 

์ดํ›„ ํ•ด๋‹น path์˜ ๋ณ€ํ™”๊ฐ€ ์ƒ๊ธธ ๋•Œ ์–ด๋– ํ•œ ๋™์ž‘์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹ค์Œ๊ณผ ์ž‘์„ฑํ•˜๋ฉด ๋œ๋‹ค.

 

if (path === '/') {
	// ~
} else if (path === '/champAnalyze') {
	// ~
} else {
	// ~
}

 

 

 

 

๐Ÿš“ useNavigate

useNavigate๋Š” React Router์—์„œ ๋ผ์šฐํŒ…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค.

 

์ด ํ›…์„ ์ด์šฉํ•˜๋ฉด ์ปดํฌ๋„ŒํŠธ ๋‚ด์—์„œ ์‚ฌ์šฉ์ž๋ฅผ ๋‹ค๋ฅธ ๊ฒฝ๋กœ๋กœ ๋ฆฌ๋””๋ ‰์…˜ ํ•˜๊ฑฐ๋‚˜, ์ด์ „ ํŽ˜์ด์ง€๋กœ ๋Œ์•„๊ฐ€๊ฒŒ ํ•˜๋Š” ๋“ฑ์˜ ๋ผ์šฐํŒ… ๊ด€๋ จ ์ž‘์—…์„ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ useNavgiate๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” React Router์—์„œ ์ด๋ฅผ ์ž„ํฌํŠธํ•ด์•ผํ•œ๋‹ค.

 

import { useNavigate } from 'react-router-dom';

 

 

๊ทธ๋ฆฌ๊ณ  ์ปดํฌ๋„ŒํŠธ์—์„œ useNavigate๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ navigateํ•จ์ˆ˜๋ฅผ ์–ป๋Š”๋‹ค.

 

์ดํ›„ =ํŠน์ • ๊ฒฝ๋กœ๋กœ ์ด๋™ํ•˜๊ธฐ ์œ„ํ•ด navigateํ•จ์ˆ˜์— ๊ฒฝ๋กœ๋ฅผ ๋ฌธ์ž์—ด๋กœ ์ „๋‹ฌํ•˜๋ฉด ๋œ๋‹ค.

 

const navigate = useNaviate();

navigate('/๋ฉ”์ธ');

 

์ด๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฉ”๋‰ด๋ฅผ ํด๋ฆญํ–ˆ์„ ๋•Œ ํŽ˜์ด์ง€๋ฅผ ์ด๋™ํ•˜๋„๋ก ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•ด๋ณด๊ฒ ๋‹ค.

 

 

 

์•„๋ž˜์˜ ๋งํฌ์—์„œ ์ด์–ด์„œ ์ง„ํ–‰๋œ๋‹ค.

 

https://2t-hong.tistory.com/177

 

[LOLPAGO] React ์„ค์น˜ ๋ฐ Header ๊ตฌ์„ฑ(4)

๐Ÿš— useEffect๋ฅผ ์ด์šฉํ•œ Header ๊ตฌ์„ฑ useEffect๋ฅผ ์ด์šฉํ•˜์—ฌ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ ํ™”๋ฉด์„ ๋ Œ๋”๋ง ํ•  ์ˆ˜ ์žˆ๋‹ค. ์•„๋ž˜์˜ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ useEffect์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ณ  ์˜ค๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•œ๋‹ค. https://2t-hong.tistory.com/175

2t-hong.tistory.com