์๋ ๋ฌธ์ ๊ฐ ์๋ ์ฝ๋์ ์ด๋ฒ์ border๋ฅผ linear๋ก ๋ฐ๊พธ๋ฉด์ setํจ์๋ฅผ ๋ฐฐ์ด๋ก ๋๊ฐ ๋ฃ์ด์ฃผ๋ค๋ณด๋ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
# ์๋ ์ฝ๋
useEffect(() => {
if (isPost.data?.isAllSeen == false) {
for (let i = 0; i < isPost.data?.seenPostList.length; i++) {
if (isPost.data?.seenPostList[i].isSeen == false) {
if (isPost.data?.seenPostList[i].isPublic == true) {
setBorderColor(['#6935FD', '#9747FF']);
setIndex(i);
break;
}
if (isPost.data?.seenPostList[i].isPublic == false) {
setBorderColor(['#FFAC7E', '#FFE4BC']);
setIndex(i);
break;
}
}
}
}
}, [isPost]);
์์ ์ฒ๋ผ ๊ณต๊ฐํฌ์คํธ์ผ ๊ฒฝ์ฐ์๋ ์์ if๋ฌธ์ด ๋๊ฒ ๋๊ณ , ๊ทธ๊ฒ ์๋ ๊ฒฝ์ฐ์๋ ์๋ if๋ฌธ์ ๋๋ฉด์ setํจ์๊ฐ ๋๊ฒ๋ ๋ก์ง์ ์งฐ์๋ค.
ํ์ง๋ง ์๋ warning์ด ๋ด๋ค.
Warning: Maximum update depth exceeded. This can happen when a component calls setState inside useEffect, but useEffect either doesn't have a dependency array, or one of the dependencies changes on every render.
์ด ๋ง์ useEffect ์์ setState๋ฅผ ๋๋ฆฌ๊ฒ ๋๋ฉด ๋ฌดํ๋ฃจํ๊ฐ ๋๊ฒ ๋๋ค๋ ๊ฑฐ๋ค.
์ ๊ทธ๋ด๊น?
useEffect ๋ด์์ setState๋ฅผ ํธ์ถ๋๋ฉด -> ์ปดํฌ๋ํธ ์ฌ๋ ๋๋ง -> useEffect ๋ ํธ์ถ -> ๋ setState -> ๋ ๋ ๋๋ง..
์ด๋ ๊ฒ ๋ฌดํ ๋ฃจํ์ ๋ช์ ๋น ์ง๊ฒ ๋๋ค.
๋๊ฐ์ง ํด๊ฒฐ๋ฒ์ ์ ์ฉํ๋ค.
1. ์กฐ๊ฑด ๊ฒํ
2. ์์กด์ฑ ๋ฐฐ์ด ๊ฒํ
์ผ๋จ ์กฐ๊ฑด์ ๊ฒํ ํด๋ดค๋ค.
์์ง ๋ณด์ง ์์ ํฌ์คํธ์ ์์ด์ ์์ ์ง์ ํด์ฃผ๋ ๋ก์ง์ ์๋ ์ฝ๋์ ๊ฐ์ด ์์ ํ๋ค.
๊ทธ๋ฐ๋ฐ๋ ๊ณ์ํด์ ์๋ฌ๊ฐ ๋๊ธธ๋ ๋ญ๊ฐ ๋ฌธ์ ์ธ๊ณ ํ๊ณ ๋ค์ฌ๋ค๋ดค๋ค.
์์ง useEffect๊ฐ 3๋ฒ ์ด์์ด ์คํ๋๋ ๊ฑธ ๋ฐ๊ฒฌํ๊ณ , 2๋ฒ ํด๊ฒฐ๋ฒ์ด์๋ ์์กด์ฑ ๋ฐฐ์ด์ ๊ฒํ ํ๋ค.
์๋๋ isPost๋ฅผ ์์กด์ฑ ๋ฐฐ์ด ์์ ๋ฃ์ด๋จ์๋๋ฐ, ๋๋ฌด ๋ง์ด ์คํ๋๋ ๊ฒ ๊ฐ์์ ๋ฒ์๋ฅผ ์ข ๋ ์ขํ๋ค.
๋ณธ ํฌ์คํธ ๋ชฉ๋ก์ด ์์ ๋๋ค๋ ๊ฑด => ํฌ์คํธ๋ฅผ ์ต์ ํ๋๋ผ๋ ์ฝ์๋ค๋ ๋ป์ด๊ณ , ๊ทธ๋ ์คํ์ ํด์ฃผ๋ฉด ๋๋ค๊ณ ํ๋จํ๋ค
useEffect(() => {
if (isPost.data?.isAllSeen === false) {
const unseenPostIndex = isPost.data?.seenPostList.findIndex(post => !post.isSeen);
const color = isPost.data?.seenPostList[unseenPostIndex].isPublic
? ['#6935FD', '#9747FF']
: ['#FFAC7E', '#FFE4BC'];
setBorderColor(color);
setIndex(unseenPostIndex);
}
else {
setBorderColor(['#101011','#101011'])
}
}, [isPost.data?.seenPostList]);
์ด๋ ๊ฒ ๋๊ฐ์ง ํด๊ฒฐ๋ฒ์ ๋ชจ๋ ์ ์ฉํ๋๋ ๋ฌธ์ ์์ด ์ ๋์๊ฐ๋ค!!
์ด๋ฒ ๊ธฐํ๋ฅผ ํตํด useEffect ์์ setํจ์๊ฐ ๋์๊ฐ๋ฉด์ ๋ฌดํ๋ฃจํ๊ฐ ๋ฐ์ํ๊ฒ ๋๋ ์ด์ ๋ ๊ทธ์ ๋ง๋ ํด๊ฒฐ๋ฐฉ๋ฒ์ ์ ์ ์์๊ณ , useEffect๋ฅผ ์ฌ์ฉํ ๋ ์ด ๋ถ๋ถ์ ์กฐ์ฌํด์ ๋ก์ง์ ์ง์ผ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์๋ค.
'WEB > REACT' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Ref๋ฅผ ์ข ๋ ์ ์จ๋ณผ๊น? (forwardRef์ย useImperativeHandle) (0) | 2024.06.28 |
---|---|
react-query๋ฅผ ์งง๊ฒ ์ฌ์ฉํด๋ณธ ํ๊ณ ..๋๊น...? (0) | 2023.04.04 |
๋ฆฌ์กํธ์์ setState๋ฅผ ํตํด์ state๋ฅผ ๋ณ๊ฒฝํด์ฃผ๋ ์ด์ / setState์ ๋น๋๊ธฐ์ฑ (0) | 2022.10.21 |
Redux (0) | 2021.07.13 |
[React] useEffect (0) | 2021.07.06 |