๊ฐœ๋ฐœ ๐Ÿพ/์ผํ•˜๊ณ ,์ •๋ฆฌํ•˜๊ธฐ

React์—์„œ Router state ์‚ฌ์šฉ

JOTOKKI 2023. 1. 18. 19:52
728x90

๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•

router์—์„œ navigate๋กœ ์ด๋™์‹œ state์— ๊ฐ์ฒด ํ˜•ํƒœ๋กœ ๊ฐ’์„ ๋„˜๊ฒจ์„œ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค. 

๋˜ํ•œ parameter ๋ฐฉ์‹๊ณผ๋Š” ๋‹ฌ๋ฆฌ ๋”ฐ๋กœ router url ๋’ค์— ๊ฐ’์„ ์„ค์ •ํ•ด์ฃผ์ง€ ์•Š์•„๋„ ๋˜๊ณ , 

url์— ๋„˜๊ธฐ๋Š” ๊ฐ’์ด ๋…ธ์ถœ ๋˜์ง€ ์•Š์•„์„œ ์ข‹์•˜๋‹ค. 

// ๋ณด๋‚ผ๋•Œ 
navigate(URL, {state: {id: "user1"}})

// ๋ฐ›์„๋•Œ 
import {useLocation} from "react-router";

const location = useLocation();
const id = location.state ? location.state.id : null; // <= "user1"

 

๊ธฐ์กด ๋ชฉ๋ก์—์„œ ์ƒ์„ธ์ด๋™ํ• ๋•Œ ์š”๊ธดํ•˜๊ฒŒ ์“ฐ๊ธด ํ–ˆ๋Š”๋ฐ, 

์žฅ์ ๋งŒ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋ผ์„œ ์š”๊ตฌ๋˜๋Š” ์„œ๋น„์Šค ํ˜•ํƒœ์— ๋งž์ถฐ ์ ์ ˆํžˆ ์ž˜ (์„ธ์ƒ์—์„œ ์ œ์ผ ์–ด๋ ค์šด..๐Ÿ˜‘) ์“ฐ๋ฉด ๋˜๊ฒ ๋‹ค. 

 

์žฅ์ 

1. url์— ๊ฐ’์„ ๋…ธ์ถœ ์‹œํ‚ค์ง€ ์•Š๊ณ  ๊ฐ’์„ ๋„˜๊ธธ ์ˆ˜ ์žˆ๋‹ค.

2. url ๋์— ๋‹ค์ˆ˜๊ฐ€ ๋  ์ˆ˜๋„ ์žˆ๋Š” ๊ฐ’์ด ๋ถ™์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, ํ˜น์‹œ๋ผ๋„ pathname๊ฐ’์„ ๊ณ„์‚ฐํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ ์ผ๊ด€๋˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 

3. Routes์—์„œ path ๊ฐ’์— ๋ณ„๋„์˜ ์„ค์ •์—†์ด ๋ฐ”๋กœ ์“ธ ์ˆ˜ ์žˆ์–ด์„œ ๊ฐ„ํŽธํ•˜๋‹ค. 

4. ์•„๋งˆ.. ๊ทธ์™ธ์—๋„ ๋” ๋งŽ์€ ์žฅ์ ์ด ์žˆ์„ ๊ฒƒ์ด๋‹ค...

 

๋‹จ์ 

1. url๋กœ ๋ฐ”๋กœ ์ ‘๊ทผ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ๋Š” ๋„˜๊ธฐ๋Š” state๊ฐ’์ด ์—†์œผ๋ฏ€๋กœ ๊ฐ’์„ ์•Œ ์ˆ˜ ์—†๋‹ค.

์˜ˆ๋ฅผ๋“ค์–ด ๋งํฌ๋กœ๋งŒ ์ƒ์„ธํŽ˜์ด์ง€์— ์ ‘๊ทผํ•˜๋Š”๊ฒฝ์šฐ, ๋ชฉ๋ก์—์„œ ๊ฒŒ์‹œ๊ธ€ ์•„์ด๋””๋ฅผ ๋„˜๊ธด๋‹ค๊ณ  ๊ฐ€์ •ํ–ˆ์„๋•Œ, ๋„˜์–ด๊ฐ€๋Š” ์•„์ด๋”” ๊ฐ’ ์—†์ด ๋ฐ”๋กœ ์ƒ์„ธ์— ๋“ค์–ด๊ฐ€๊ฒŒ๋˜๋ฉด ๋ฐ›์€ ์•„์ด๋””๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์•„๋ฌด๋Ÿฐ ์ •๋ณด๋ฅผ ๋ฐ›์„ ์ˆ˜ ์—†๋‹ค. 

2. ๊ฐ™์€ url์ธ ๊ฒฝ์šฐ ํ•ด๋‹น๊ฐ’์„ useEffect๋ฅผ ํ†ตํ•ด์„œ ๊ฐ์ง€ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

๋ฆฌ์•กํŠธ ํŠน์ • ๋ฌธ์ œ์  ์ค‘์— ๋‹ค๋ฅธํŽ˜์ด์ง€๋กœ ์ด๋™ํ–ˆ์„๋•Œ ๊ธฐ์กด ์Šคํฌ๋กค์˜ ์œ„์น˜๊ฐ€ ๊ทธ๋Œ€๋กœ ๋‚จ์•„์žˆ์–ด์„œ, ๋ชจ๋“  ํŽ˜์ด์ง€๋ฅผ ๊ฐ์‹ธ๋Š” ๋ถ€๋ถ„์—  pathname์˜ ๋ณ€ํ™”๋ฅผ ๊ฐ์ง€ํ•ด์„œ window.scrollTo(0, 0)์„ ๋„ฃ์–ด์คฌ์—ˆ๋‹ค. 

์ด๋Ÿฐ ์ƒํƒœ์—์„œ ๊ฒŒ์‹œ๊ธ€ ์ƒ์„ธ์˜ ๊ฒฝ์šฐ ๋‹ค์Œ์ด๋‚˜ ์ด์ „ ํŽ˜์ด์ง€๋กœ ๋„˜์–ด๊ฐ€๋ ค๋ฉด ๊ฐ™์€ url์— ์•„์ด๋”” ๊ฐ’๋งŒ ๋ฐ”๋€Œ๋Š” ์ผ€์ด์Šค๊ธฐ ๋•Œ๋ฌธ์—, 

์ „์ฒด ์„ ์–ธ๋œ ์œˆ๋„์šฐ ์Šคํฌ๋กค์„ ์ƒ๋‹จ์œผ๋กœ ์˜ฌ๋ฆฌ๋Š” ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋จน์งˆ ์•Š์•„, ์ด๋Ÿด๋•Œ๋Š” ์•„์ด๋”” ๊ฐ’์ด ๊ฒฐ๊ตญ state์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ useEffect๋กœ ๊ฐ์ง€ํ•ด์„œ ์—…๋ฐ์ดํŠธ ํ•ด์ค˜์•ผ ํ•œ๋‹ค. 

๋ฐ˜์‘ํ˜•