인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

박재호님의 프로필 이미지
박재호

작성한 질문수

[리뉴얼] React로 NodeBird SNS 만들기

게시글, 댓글 saga 작성하기

error, done, loading 상태 질문

해결된 질문

작성

·

230

1

각 비동기 데이터마다 loading, error, done을 모두 만들어주던데 실제로 쓰지않는 상태는 애초에 작성안해도될까요??

그리고 비동기 성공할때(done === true)가 될때 useEffect 안에서 다른 로직을 작성하려는데 done이 true가 되면 해당 비동기요청 디스패치를 하기전까지는 true로 남아있어서 문제가되던데 done === true 상태를 false로 넘어가는 액션을 따로만들어서 useEffect의 흐름이 
useEffect(() => {
  if(done) {
   ...done이 true일경우 비즈니스로직
}
dispatch(doneFalse)// *done을 false로 바꿔주는 액션 디스패치로 실행
}, [done]);

이런식으로 해야하나요? 다른 좋은 방법이 따로 있을까요!>?

답변 1

0

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

네 안 쓰는 상태는 작성 안 하셔도 됩니다. 다만 안 쓰다가 나중에 갑자기 필요할 수도 있고, 갑자기 다시 필요없어질수도 있고 하기때문에 그냥 미리 만드는 겁니다.

저도 예전에는 done을 false로 만드는 액션을 따로 두긴 했습니다.

다른 방식으로는 loading과 done에 true 대신 액션의 id(id는 랜덤 생성)를 부여해서 이전 액션과, 다음 액션을 구분하는 방법이 있습니다. done된 액션이 있고, 그 다음 액션이 실행될때 다음 액션은 이전 액션과 id가 다르므로 이전 액션 id가 들어있는 done을 무시하는 겁니다. 근데 이 방식도 코딩이 상당히 들어갑니다.

박재호님의 프로필 이미지
박재호
질문자

오오 말씀해주신대로 액션아이디 생성하는 방식으로 진행했더니  깔끔하게 해결하였습니다 정말 감사드립니다.
혹시 해당 문제가 리덕스가 아닌 react-query로 사용했을때에는 신경쓰지 않아도 되는 문제인가요!?

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

done이라는 상태를 명시적으로 두면 어디서나 일어나는 문제입니다.

박재호님의 프로필 이미지
박재호
질문자

감사합니다:) 

박재호님의 프로필 이미지
박재호

작성한 질문수

질문하기