인프런 커뮤니티 질문&답변
front 부분 여러가지 질문
해결된 질문
작성
·
274
0
nodebird react에서 front부분까지만 들은 상태입니다.
redux 의 실행 흐름이
dispatch(액션) -> 미들웨어(redux-saga) -> 리듀서 -> 스토어
이러한 방식으로 알고 있는데
언뜻 보면 미들웨어가 먼저 실행되니 success or failure가 먼저 실행될것 같은데
saga함수에 딜레이를 안주더라도 실행은 request가 무조건 먼저 되는것 같습니다.
왜 이렇게 실행이 되는건가요? 미들웨어와 리듀서가 비동기적으로 실행되는건가요?
Success or failure가 먼저 실행되는 케이스가 있나요?
각 기능들에 대한 상태관리를 request, success, failure 3가지의 액션타입으로 관리하는 이유가 뭔가요? 공식문서에는 이렇게 나와있긴 한데
https://lunit.gitbook.io/redux-in-korean/advanced/asyncactions
" 하나의 액션 타입에 표지를 두고 사용하건, 여러 액션 타입을 사용하건 여러분에게 달렸습니다. 여러분이 팀과 함께 정할 규칙일 뿐입니다. 여러 타입을 쓰면 실수는 줄겠지만, 여러분이 redux-actions와 같은 헬퍼 라이브러리를 써서 액션 생산자와 리듀서를 만든다면 이게 별 문제가 되지 않을 수도 있습니다. "
제로초님 입장에서는 어떻게 생각하시나요? 또 실무에서는 하나의 액션으로 처리하는지 아니면 강좌처럼 세가지의 액션으로 나누어서 처리하는지 궁금합니다.
request에 대한 로직을 하나 보면
case LOG_IN_REQUEST: draft.loginLoading = true; draft.logInError = null; draft.logInDone = false; // Done을 왜 굳이 초기화 해야하지?logInDone 같은 경우는 request 이전에도 이미 false라고 생각하는데 따로 초기화를 명시해주는 이유가 있나요?
프론트엔드를 구현할때 처음에 데이터 구조 잡을 때 아직 정해진거 없으면 전체 데이터베이스 구조를 제가 정하고 들어가야 하는건가요?
전체 테이블 구조를 관계설정까지 다 잡고 들어가야 하는건지, 아니면 내가 구현하는 기능에 대한 테이블 구조만 하나씩 잡고 들어가면 되는건지 궁금합니다.
사실 이 강좌를 듣기 전에는 프론트엔드 부분 데이터를 구현할 때
백엔드로 요청을 보내고, 그 응답으로 데이터를 건네받아서, 해당 데이터를 가지고 프론트에
직접 값을 표시하는 방식으로 웹이 돌아가겠지, 라고 생각을 했습니다.
(프론트엔드에서 API 요청 -> 백엔드에서 데이터처리, 응답 -> 응답에서 받은 데이터로 뷰 가공 및 출력)
그런데 강좌에서는 벡엔드에서의 처리와 별개로, 프론트에서의 데이터는 프론트에서의 로직만으로 처리하도록 구현하셨는데요. 이렇게 하는 이유가 있으신가요?
프론트를 처음 구현할때 처음에 데이터 구조 잡을 때 아직 정해진거 없으면 먼저 전체 데이터베이스 구조를 제가 정하고 들어가야 하는건가요?
전체 테이블 구조를 관계설정까지 다 잡고 들어가야 하는건지, 아니면 내가 구현하는 기능에 대한 테이블 구조만 하나씩 잡고 들어가면 되는건지 궁금합니다.
redux saga 함수 로직보면 백엔드API요청 후에 put 연산 success or failure 로직으로 나뉘는데
원래 try catch 문 안쓰면 axios.post().then(() => put(action)).catch(e => put(action)) 이런식으로 쓰는 로직이랑 같은건가요?
답변 1
1
미들웨어랑 리듀서랑 실행이 독립적입니다. 둘 다 실행됩니다.
리덕스에서 세 가지로 실행하도록 아예 공식적으로 정해져있습니다.
여러 번 로그인/로그아웃을 하는 경우를 생각해보세요.
내가 구현하는 기능만 구조를 잡으시면 됩니다.
이걸 하기 위해 프론트엔드 개발자가 생긴 겁니다. 이걸 안하면 퍼블리셔나 다를 바가 없습니다.
4번이랑 동일한 질문이네요.
네 맞습니다. call(api).then(...).catch(...)겠죠.




