[TIL] ์—๋Ÿฌ๋…ธํŠธ๐Ÿ“• - Can't perform a React state update on an unmounted component

June hyoung Parkยท2020๋…„ 9์›” 3์ผ
0

React

๋ชฉ๋ก ๋ณด๊ธฐ
6/19

์š”์ฆ˜ MERN์Šคํƒ์œผ๋กœ ๋กœ๊ทธ์ธ ๋ฐ ํšŒ์›๊ฐ€์ž… ๊ธฐ๋Šฅ ๊ธฐ๋ฐ˜์˜ ๋ณด์ผ๋Ÿฌ ํ”Œ๋ ˆ์ดํŠธ๋ฅผ ๋งŒ๋“ค์–ด๋ณด๊ณ  ์žˆ๋‹ค.
์‚ฌ์‹ค ๋‚ด๊ฐ€ ์“ธ๋ ค๊ณ  ๋งŒ๋“ค๊ณ ์žˆ๋‹ค :)

React, Nodejs(Express), MongoDB ๊ธฐ๋ฐ˜์œผ๋กœ ์ œ์ž‘์ค‘์ด๋ฉฐ, ๋กœ๊ทธ์ธ ๋ฐ ํšŒ์›๊ฐ€์ž…์ด ๋ฉ”์ธ ๊ธฐ๋Šฅ์ธ ๋ณด์ผ๋Ÿฌ ํ”Œ๋ ˆ์ดํŠธ์ธ ๋งŒํผ bcrypt๋ฅผ ์ด์šฉํ•œ ํŒจ์Šค์›Œ๋“œ ์•”ํ˜ธํ™” ๋ฐ JWT(JsonWEBToken)์„ ์ด์šฉํ•œ ํ† ํฐ ๋ฐœ๊ธ‰ ๋“ฑ๋“ฑ, ์•„์ง ๋งŽ์ด ์„œํˆด์ง€๋งŒ ์ตœ์†Œํ•œ์˜ ๊ตฌ์‹ค์€ ๊ฐ–์ถ”๋ ค๊ณ  ๋…ธ๋ ฅ์ค‘์ด๋‹ค.

๋กœ๊ทธ์ธํŽ˜์ด์ง€๋ฅผ ์ž‘์—…ํ•˜๋˜ ๋„์ค‘ ์ฒ˜์Œ๋ณด๋Š” ์—๋Ÿฌ๋ฅผ ๋งŒ๋‚˜๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ, ๋กœ๊ทธ์ธ ์ปดํฌ๋„ŒํŠธ์—์„œ ์ด๋ฉ”์ผ, ํŒจ์Šค์›Œ๋“œ๋ฅผ ์ž…๋ ฅ ํ›„ Submit์„ ๋‚ ๋ฆฌ๋ฉด ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ์˜€๋‹ค.(Warning์ด๋ผ๊ณ  ํ•ด์•ผํ•˜๋‚˜)

๋ณด์•„ํ•˜๋‹ˆ, Unmounted๋œ ์ปดํฌ๋„ŒํŠธ๋Š” ์ƒํƒœ ์—…๋ฐ์ดํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†๊ณ , ํ•ด๋‹น ์ž‘์—…์€ ์ˆ˜ํ–‰๋˜์ง€๋Š” ์•Š์ง€๋งŒ
๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋‹ˆ useEffect์˜ cleanup function์„ ์ด์šฉํ•ด์•ผ ํ•œ๋‹ค๊ณ ํ•œ๋‹ค.

์ฒ˜์Œ์—” ์–ด๋””์„œ ์ผ์–ด๋‚˜๋Š”๊ฑด์ง€ ๊ฐ์ด ์•ˆ์žกํ˜”๋Š”๋ฐ, ์ด๊ฒƒ์ €๊ฒƒ ํ…Œ์ŠคํŠธํ•ด๋ณด๋‹ˆ onSubmitHandlerํ•จ์ˆ˜ ๋ถ€๋ถ„์—์„œ ์ปดํฌ๋„ŒํŠธ์˜ state๋ฅผ ๊ฑด๋“œ๋ฆฌ๋Š” ๋ถ€๋ถ„์ด ๋ฌธ์ œ์˜€๋‹ค.

onSubmitHandlerํ•จ์ˆ˜๋Š” form์—์„œ submit ์‹œ ์‹คํ–‰๋˜๋Š” ํ•จ์ˆ˜์ด๋‹ค. ํ•จ์ˆ˜ ์‹คํ–‰ ํ›„ ์‚ฌ์šฉ์ž๊ฐ€ ์ธํ’‹์— ์ž…๋ ฅํ•œ ๊ฐ’์€ requestBody๋ผ๋Š” ๊ฐ์ฒด์— ๋‹ด๊ฒจ loginUser๋ผ๋Š” ์•ก์…˜์„ ํƒ€๊ณ  dispatch๋˜๊ฒŒ ๋œ๋‹ค. (์ด ๋ถ€๋ถ„์€ ๋ฆฌ๋•์Šค ๋ถ€๋ถ„์ด๊ธฐ์— ์ž์„ธํžˆ ์„ค๋ช…ํ•˜์ง„ ์•Š๊ฒ ๋‹ค.) ๊ทธ ํ›„ response๋กœ ๋ฐ›์•„์˜ค๋Š” loginSuccess ์—ฌ๋ถ€์— ๋”ฐ๋ผ ๋ฃจํŠธ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ• ์ง€, 'Login Fail'์ด๋ž€ ์•Œ๋ฆผ ํ›„ ์ธํ’‹์˜ ์ด๋ฉ”์ผ ํŒจ์Šค์›Œ๋“œ๋ฅผ ์ง€์›Œ์ค€๋‹ค.

์œ„ ์—๋Ÿฌ๋Š” ๋กœ๊ทธ์ธ ์„ฑ๊ณต ์‹œ ๋ฃจํŠธ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜๊ฒŒ๋˜๊ณ , ์ด๋™ ํ›„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€๋‹ค. ์ƒ๊ฐํ•ด๋ณด๋‹ˆ ๋ฃจํŠธ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•œ ์‹œ์ ์—์„  ์ด๋ฏธ ๋กœ๊ทธ์ธ ์ปดํฌ๋„ŒํŠธ๋Š” Unmounted๋˜์—ˆ์ง€๋งŒ, setEmail(''), setPassword('')๋ฅผ ํ†ตํ•ด state ์ดˆ๊ธฐํ™”๊ฐ€ ์ด๋ฃจ์–ด์ง„๋‹ค. ๋ฌผ๋ก  ์ž‘๋™์—๋Š” ์ด์ƒ์—†๊ฒ ์ง€๋งŒ, ๋ถˆํ•„์š”ํ•œ ์ž‘์—…์ด๋‹ˆ ์—๋Ÿฌ ๋ฉ”์„ธ์ง€์ค‘
'This is a no-op, but it indicates a memory leak in your application'์ด๋ž€ ๋ฌธ์žฅ์ด ํฌํ•จ๋˜์–ด์žˆ๋Š”๊ฒƒ ๊ฐ™๋‹ค.

์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ์œ„ํ•ด ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์ค€๋’ค ์™„์„ฑ๋„๋ฅผ ๋†’์ด๊ธฐ์œ„ํ•ด ์ถ”๊ฐ€์ ์œผ๋กœ ์กฐ๊ฑด๋ถ€ ๋ Œ๋”๋ง์„ ํ†ตํ•ด ์—๋Ÿฌ๋ฉ”์„ธ์ง€๋ฅผ ํ‘œ์‹œํ•˜๊ฒŒ๋” ํ•ด์คฌ๋‹ค.

๋กœ๊ทธ์ธ ์‹คํŒจ์‹œ alert๊ฐ€ ์•„๋‹Œ, ์กฐ๊ฑด๋ถ€ ๋ Œ๋”๋ง์œผ๋กœ ์ปดํฌ๋„ŒํŠธ์— ์‹คํŒจ ๋ฉ”์„ธ์ง€๊ฐ€ ๋‹ด๊ธด ํ…์ŠคํŠธ๋ฅผ ์‚ฝ์ž…์‹œํ‚ค๋„๋ก ํ•ด์ฃผ์—ˆ๋‹ค.

profile
Take me home~~~~

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