useRef๋ฅผ ํ™œ์šฉํ•˜์—ฌ stale closure๋ฅผ ํ•ด๊ฒฐํ•ด๋ณด์ž
ยท
Intern
์ฃผ์˜: ์ •ํ™•ํ•˜์ง€ ์•Š์€ ์„œ์ˆ ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ปดํฌ๋„ŒํŠธ A์—์„œ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด recoil state๊ฐ€ ๋ณ€๊ฒฝ๋˜๊ณ , Hook B์˜ useEffect์˜ ์˜์กด์„ฑ ๋ฐฐ์—ด์— ํ•ด๋‹น recoil state๊ฐ€ ์žˆ์–ด์„œ Hook B์—์„œ ๋™์ž‘์ด ์ˆ˜ํ–‰๋˜๊ฒŒ ์„ค๊ณ„๋ฅผ ํ–ˆ์—ˆ๋‹ค.ํ•˜์ง€๋งŒ Hook B์—์„œ recoil state์˜ ๋ณ€๊ฒฝ์„ ์ž˜ ๊ฐ์ง€ํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ–ˆ๊ณ , ๋”ฐ๋ผ์„œ ์˜๋„์น˜ ์•Š๊ฒŒ ์ž‘๋™์ด ๋˜๋Š” ์ƒํ™ฉ์ด ๋ฒŒ์–ด์กŒ๋‹ค.1. ์™œ recoil state์˜ ๋ณ€๊ฒฝ์„ ๊ฐ์ง€ํ•˜์ง€ ๋ชปํ–ˆ์„๊นŒ? // Component A const [something, setSomething] = useRecoilState(somethingState); const handleItemClick = (e: React.MouseEvent) => { set..
'react-datepicker'์—์„œ ๋‚ ์งœ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•  ๋•Œ ๊ฒช์—ˆ๋˜ ์‹œํ–‰์ฐฉ์˜ค
ยท
Frontend
1. react-datepicker๋กœ ๋‹ฌ๋ ฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค.ํ˜„์žฌ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ๋Š” ํ”„๋กœ์ ํŠธ์—์„œ ๋‹ฌ๋ ฅ์œผ๋กœ ๋‚ ์งœ๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒƒ์„ ๊ตฌํ˜„ํ•ด์•ผ ํ–ˆ๋‹ค. ๋‹ฌ๋ ฅ์„ ์ง์ ‘ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์€ ํž˜๋“ค ๊ฒƒ ๊ฐ™์•„์„œ ‘react-datepicker’ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค. ์ผ๋‹จ ๋‹ฌ๋ ฅ UI๋ฅผ ํ”ผ๊ทธ๋งˆ์— ๋งž๊ฒŒ ์ปค์Šคํ…€ํ•˜๋Š” ๊ฒƒ์— ์ง‘์ค‘ํ–ˆ๋‹ค. ๋‹ฌ๋ ฅ์„ ์ปค์Šคํ…€ํ•˜๋Š” ๊ฒƒ์€ ์ƒ๊ฐ๋ณด๋‹ค ์–ด๋ ค์› ์ง€๋งŒ, ์—ฌ๋Ÿฌ ๋ฒˆ ์‹œํ–‰์ฐฉ์˜ค๋ฅผ ๊ฒช์œผ๋‹ˆ ๋น„์Šทํ•˜๊ฒŒ ๋ณด์ด๊ฒŒ ๋งŒ๋“œ๋Š”๋ฐ์—๋Š” ์„ฑ๊ณตํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.  2. ์ด์ œ ๋‚ ์งœ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜์ž์ด์ œ๋Š” ์„ ํƒํ•œ ๋‚ ์งœ๋ฅผ ์ƒํƒœ๋กœ ๊ด€๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.๋จผ์ € ๊ตฌ์กฐ๋ฅผ ์„ค๋ช…ํ•˜์ž๋ฉด, SelectBox๋ฅผ ํด๋ฆญํ•˜๋ฉด ๋‚ด๊ฐ€ ๋งŒ๋“ค์–ด๋†“์€ Dialog ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋‚˜์˜ค๊ณ , Dialog ์ปดํฌ๋„ŒํŠธ์˜ children์— Datepicker๊ฐ€ ์žˆ๊ณ  ๊ทธ ๋ฐ‘์—๋Š” ํ™•์ธ(confirm) ๋ฒ„ํŠผ๊ณผ ๋‹ซ๊ธฐ(ca..