react hook router

nullยท2021๋…„ 12์›” 8์ผ
0

useHistory

๐Ÿ”ธ ์ƒํ™ฉ ์„ค์ •: 1:1 ๋ฌธ์˜ ๋‚ด์—ญ์— page๋ฅผ ๋„˜๊ธธ ๋•Œ๋งˆ๋‹ค ์ฟผ๋ฆฌ์ŠคํŠธ๋ง์„ ๋ณ€ํ™”์‹œํ‚จ๋‹ค

// 1:1 ๋ฌธ์˜๋‚ด์—ญ ์—ด ๋–„ 
useEffect(() => {
	getList(page ?? 1);
},[])

async function getList(page){
	...
	...
	history.push({
		pathname: 'account/inquiry-list',
		search: `page=${page}`
	)}
}
  • history.push๋ฅผ ํ•ด์คŒ์œผ๋กœ์„œ 1:1๋ฌธ์˜๋‚ด์—ญ ๋“ค์–ด์˜ฌ ๋•Œ url account/inquiry-list/?page=1
  • ๊ทธ๋Ÿผ ์—ฌ๊ธฐ getList(page) ์— page๊ฐ’์€ ์–ด๋–ป๊ฒŒ ๋ฐ›์•„์˜ค๋Š”๊ฑฐ๋ƒ?
//์ฟผ๋ฆฌ์ŠคํŠธ๋ง ๊ฐ’๋งŒ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
import qs from 'query-string';
 

const { page } = qs.parse(location.search, { parseNumbers: true}) as { page: number };

console.log(location.search); // ?page=1
//์ฟผ๋ฆฌ์ŠคํŠธ๋ง ๊ฐ’๋งŒ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ๋‹ค 
console.log(page); // 1

๐Ÿ“Œ history.location์€ ๋ณ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค

useLocation

ํ˜„์žฌ ๋จธ๋ฌผ๊ณ  ์žˆ๋Š” ํŽ˜์ด์ง€์˜ ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์•Œ๋ ค์ค€๋‹ค. (ํŽ˜์ด์ง€ ์ด๋™ํ•˜๋ฉด์„œ ๊ฐ’์„ ์ „๋‹ฌ ๋ฐ›์„ ๋•Œ)

๐Ÿ”ธ ์ƒํ™ฉ ์„ค์ •: ์ •๋ณดํฌํ„ธ ์ž์„ธํžˆ ๋ณด๋Ÿฌ๊ฐ€๊ธฐ ๋ฒ„ํŠผ์ด ์žˆ๋‹ค. ์ด ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด ํ•™๊ต ํ™ˆํŽ˜์ด์ง€๋กœ ๋„˜์–ด๊ฐ€๋„๋ก ํ•˜๊ธฐ
์ƒˆ๋กœ๊ณ ์นจ๊ฐ™์ด ๊ณ ์ •๊ฐ’์ด ํ•„์š”ํ•  ๋•Œ?

// ๋ฒ„ํŠผ์ด ํฌํ•จ๋œ ์ปดํฌ๋„ŒํŠธ 

function handleClick() {
	....
	....
	if (isHana) history.push({
		pathname: '/school-info'
		//url์€ ์œ ์ €๊ฐ€ ๋งˆ์Œ๋Œ€๋กœ ์ž‘์„ฑ ๊ฐ€๋Šฅ onUrl..๋“ฑ๋“ฑ
		state: {url: "http://sadang.sen.es.kr"}
	});

}

<LinkBtn onClick={handleClick}>์ •๋ณดํฌํ„ธ ์ž์„ธํžˆ ๋ณด๋Ÿฌ๊ฐ€๊ธฐ</LinkBtn>
// schoolInfo ์ปดํฌ๋„ŒํŠธ์— ์™€์„œ  locatation์˜ ์ •๋ณด๋ฅผ ์ฝ˜์†”์ฐฝ์— ์ณ๋ณด์•˜๋‹ค

{pathname: "/school-info", state: {โ€ฆ}, search: "", hash: "", key: "2acshh"}
	hash: ""
	key: "2acshh"
	pathname: "/school-info"
	search: ""
	state: {url: "http://sadang.sen.es.kr"}
	...
  • pathname: ์›น url: mobile/school-info ๊ฒฐ๊ณผ ๊ฐ’์€ pathname = school-info
  • state: ๋ณด๋‚ด์ค€ ๋ฐ์ดํ„ฐ๋“ค. . .

useParams

useLocation์€ ์•ž์„œ ์–ธ๊ธ‰ํ•œ ๊ฒƒ ์ฒ˜๋Ÿผ ์ฟผ๋ฆฌ์ŠคํŠธ๋ง ์ •๋ณด๋ฅผ ์•Œ๊ธฐ ์ข‹๋‹ค๋ฉด useParams๋Š” path parameter(๋™์  ๋ผ์šฐํŒ…) ์•Œ๊ธฐ ์ข‹๋‹ค

๐Ÿ”ธ 1:1 ๋ฌธ์˜๋‚ด์—ญ ์ˆ˜์ •ํ•  ๋•Œ seq๊ฐ’์„ api๋ฅผ ํ†ตํ•ด ๋ฐ›์•„์„œ ์ผ๋ถ€ ๋‚ด์šฉ์„ ๋ถˆ๋Ÿฌ์™€์•ผํ•œ๋‹ค

// route ์ปดํฌ๋„ŒํŠธ ์—ฌ๊ธฐ์„œ seq๊ฐ€ ํŒจ์“ฐํŒŒ๋ผ๋ฏธํ„ฐ 
<Route path="/service/inquiry/:seq?" component={Inquiry} />

// ํŒจ์“ฐํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์™€๋ณด์ž
const { seq } = useParams<TParams>();
console.log(seq) // 456 ์ด๋Ÿฐ์‹์œผ๋กœ ๋ถˆ๋Ÿฌ์™€์ง 

์ฐธ์กฐ

React Router dom์˜ ์œ ์šฉํ•œ hooks๋“ค ๐Ÿ“ƒ

profile
๊ฐœ๋ฐœ์ด ์‹ซ์–ด.

0๊ฐœ์˜ ๋Œ“๊ธ€