inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

실전 리액트 프로그래밍

부수 효과 비동기

152

이워낙

작성한 질문수 1

1

// useNeedLogin.js
export default function useNeedLogin() {
const history = useHistory();
const status = useSelector((state) => state.auth.status);

useEffect(() => {
if (status === AuthStatus.NotLogin) {
history.replace("/login");
}
}, [status, history]);
}
// Search.js
export default function Search() {
useNeedLogin();
const history = useSelector((state) => state.search.history);
const dispatch = useDispatch();
useEffect(() => {
dispatch(actions.fetchAllHistory());
}, [dispatch]);

search 컴포넌트와 useNeedLogin 훅이 위와 같이 작성되어 있습니다. 

이 경우에 Search 컴포넌트 랜더링 시에 fetchAllHistory가 실행이 되어 /history api를 호출합니다.
useNeedlogin의 useEffect와 Search 컴포넌트의 useEffect가 비동기로 호출되면서 useNeedLogin의 redirect가 호출되기 전에 dispatch가 호출이 되어 그런 것이라고 생각합니다.

state.auth.AuthStatus가 Login인지를 확인하는 로직을 Search 컴포넌트의 useEffect 내에 넣어 해결할 수 있었지만, useNeedLogin 훅의 기능과 중복이 됩니다.

조금 더 깔끔한 방법이 없을까 궁급하니다. 

react redux

답변 2

1

이재승

좋은 최적화 포인트네요 👍

state.auth.status 값을 필요한 곳에서 사용하는 게 이상한 것 같지는 않습니다.
useNeedLogin 의 역할은 `미로그인 시 로그인 페이지로 이동` 이라고 할 수 있는데요
아래처럼 if 문을 추가한 것이 기능 중복이라고 보기는 힘들 것 같아요

if (status === AuthStatus.Login) {
dispatch(actions.fetchAllHistory());
}

좀 다른 얘기지만, 로그인 상태에서만 함수를 호출해주는 useEffectOnLogin 훅을 만들어서 사용하는 방법도 괜찮아 보입니다.

useEffectOnLogin(() => {
dispatch(actions.fetchAllHistory());
}, [dispatch]);

0

이워낙

답변 감사합니다.

자동완성기능이 안되네요 ..

0

500

3

화면에 에러가나네요 ...

0

517

2

setValue 함수 질문 있습니다.

0

841

1

찾아야한다 실습 문의

0

470

1

훅 기초 익히기 - 배치 처리와 순차적 처리의 차이

0

473

1

cra, next.js 관련 질문 드립니다!

0

606

1

useState 배열 비구조화 문법 질문!

0

253

1

Uncaught TypeError: Failed to execute 'removeChild' on 'Node': parameter 1 is not of type 'Node'

1

1082

2

Saga 오류 이거 혹시 왜이런지 알수 있을까요?

0

371

2

http://localhost:3001/user/search?keyword=u 이걸로 데이터를 보는데 저는 사이트에 연결할 수 없다고 나오네요

0

658

1

match

1

495

1

버튼이 생성되지 않습니다 .

0

288

1

혹시 import 옆에 파일 사이즈 표시 어떻게 하나요?

0

263

1

saga 문제

0

249

1

에러가 발생하는데 이유가뭘까요..?

0

389

2

선생님과 똑같이 했는데 다 rendering 됩니다.

0

203

1

컴포넌트와 컨테이너의 기준

0

316

1

커스텀훅의 개념과 함수차이

1

1199

1

useEffect 실전 활용법(1) 강의에서 질문있습니다.

0

338

1

리덕스, 사가파일들의 관리

0

208

1

useImperativeHandle 질문 입니다.

0

281

1

컴파일 문의드립니다.

0

204

1

React.memo 관련 질문이 있습니다.

0

374

1

Context API vs Redux 사용 빈도

0

213

1