강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của jmch09220140
jmch09220140

câu hỏi đã được viết

[Gia hạn] Tạo NodeBird SNS bằng React

안녕하세요. useEffect 관련 질문 드립니다!

Viết

·

658

0

안녕하세요 useEffect hooks 관련해서 질문드립니다.
useEffect를 하지 않았을경우 당연히 렌더는 1번되지만 useEffect로 디스패치를 하면 렌더링이 3번됩니다.

이게 정상인지 아닌지 잘 모르겠어서 질문드립니다..

reactexpressreduxnodejsNext.js

Câu trả lời 18

0

jmch09220140님의 프로필 이미지
jmch09220140
Người đặt câu hỏi

아아 네..알겠습니다 회사 끝나고 공부할때 다시 시도해보겠습니다 ㅠㅠ

0

zerocho님의 프로필 이미지
zerocho
Người chia sẻ kiến thức

const loginStatus = useSelector((state) => state.auth.user.loginStatus)

이렇게 끝까지 꺼내시면 됩니다. 객체인 경우에 그 객체 내부에 하나만 바뀌어도 다 업데이트 되거든요.

0

jmch09220140님의 프로필 이미지
jmch09220140
Người đặt câu hỏi

아 그럼 들어온데이터가 리턴에서 어떻게 해줘야 스테이트업데이트가 안될까여?

0

zerocho님의 프로필 이미지
zerocho
Người chia sẻ kiến thức

네 그런데 {...state}를 하면 user 자체는 새로운 객체로 생성됩니다. 그 내부는 유지되는 거고요. user가 새로 생성되서 그런 것 같습니다.

0

jmch09220140님의 프로필 이미지
jmch09220140
Người đặt câu hỏi

스프레드 연산자를 이용하면 같은 스테이트들은 그냥 그대로 두는게 아니었나요..?

0

jmch09220140님의 프로필 이미지
jmch09220140
Người đặt câu hỏi

그래서 loginStaus없앴는데도 같아용...혹시 라우트나 리덕스 리덕스미들웨어 연결과정에서 이런경우가 있나요?

0

zerocho님의 프로필 이미지
zerocho
Người chia sẻ kiến thức

액션에서 계속 users를 바꾸는 걸로 보이는데(loginStatus) 그에 따라 리렌더링이 일어나는 것 아닌가요?

0

jmch09220140님의 프로필 이미지
jmch09220140
Người đặt câu hỏi

Header.js

reducers/auth.js

sagas/auth.js


이렇게 되어있습니다

0

zerocho님의 프로필 이미지
zerocho
Người chia sẻ kiến thức

useSelector를 어떻게 하고 계신가요

0

jmch09220140님의 프로필 이미지
jmch09220140
Người đặt câu hỏi

지금 여기저기 콘솔로 찍어봤는데 실패했을때 사가에서 USER_LOAD_FAILURE 액션을 하게되는데 try catch문에서 USER_LOAD_FAILURE액션을 뺐더니 렌더링이 제대로 되는데... 분명 리듀서에서는 USER_LOAD_FAILURE 액션에서 바뀌는건 아무것도 없는데 왜 새로 렌더링이될까요...?

0

jmch09220140님의 프로필 이미지
jmch09220140
Người đặt câu hỏi

이게 맞나요..?

0

zerocho님의 프로필 이미지
zerocho
Người chia sẻ kiến thức

dispatch를 하면 user관련된 리덕스 스테이트들이 바뀔 것이고 useSelector로 불러온 값들도 바뀌므로 리렌더링 되는 것 아닌가요?

0

jmch09220140님의 프로필 이미지
jmch09220140
Người đặt câu hỏi

네..현재 Main.js 라우트에서는 Header.js 컴포넌트에서 유저 로드하는 액션 말고는 없는데..왜그런지 모르겠어요..
근데 디스패치만 빼면 그냥 그대로 렌더링 한번만 되는데... 뭐가문제죠...디스패치해서 셋스테이트 한번만 할뿐일텐데..

0

zerocho님의 프로필 이미지
zerocho
Người chia sẻ kiến thức

컴포넌트가 리렌더링되는 이유는 보통 state가 바뀌었거나 props가 바뀌었거나 부모 컴포넌트가 리렌더링되었을 때입니다.

이중에 해당하는 게 없나요?

0

jmch09220140님의 프로필 이미지
jmch09220140
Người đặt câu hỏi

아 죄송해요 저 액션은 유저를 로드해오는 액션인데 첫 웹사이트 접근시에는 로그인이 되어있지않아 에러를 뱉고있어요
근데 모달 함수를 주석처리해도 렌더는 세번되네요...왜그러죠..?...

0

zerocho님의 프로필 이미지
zerocho
Người chia sẻ kiến thức

로그인이 성공했고 모달이 열려있는 경우로 한정하시면 될 것 같습니다.

0

jmch09220140님의 프로필 이미지
jmch09220140
Người đặt câu hỏi

아 그럼 저게 모달닫는 함수인데 로그인 성공했을때만 실행하도록 하면 될까요?

0

zerocho님의 프로필 이미지
zerocho
Người chia sẻ kiến thức

useEffect 안에 들어있는 setIsOpen때문에 그렇습니다. 필요할 때만 setIsOpen을 호출하세요.

Hình ảnh hồ sơ của jmch09220140
jmch09220140

câu hỏi đã được viết

Đặt câu hỏi