react 는 결국 한 페이지
태그안에 태그안에 태그로 구성되어있는데
프롭이 상위컴포넌트에서 하위컴포넌트로 내려올 수 밖에 이유는
Scope 변수의 영역 때문인데
하위컴포넌트 변수의 값이 하위 컴포넌트 밖에 상위컴포넌트에는 존재할 수 없기 때문에, 범위가 닿지 않기 때문에
프롭스는 위에서 아래로 내려오는 것
그래서 redux 는 전역 페이지인 _app에 최상위로 감싸준다
그걸 하나의 index.hmtl 에 공유 함으로써 Scope가 가장 밖에 위치하므로 전역에서 쓸 수 있는 것이다.
리덕스는 단순히 리덕스만 쓸수도있고 리덕스와 리덕스-사가와 동시에 동기 비동기 통신을 진행 할 수 있다.
사가의 작동원리는 리덕스 요청 함수를 소환 시킴과 동시에 연쇄적으로 사가함수도 실행시킨다.
사가 함수 안에는 비동기 함수도 들어있다.
비동기 사가 함수가 실행이 되면 비동기 호출의 결과값이 성공 or 실패가 나오는데
그 성공한 값을 리덕스에 다시 저장시킨다 .
그래서 사가에서는 항상 요청, 성공, 실패로 나눈 이유가 promise처럼 비동기 값이 그렇게 나뉘기 때문이다.
(하지만 요청,성공만 설정해도 잘 작동하긴 하지만 reudx-devtools에서 확인하기위해 실패 reducer도 설정한다)
개발환경에서 미들웨어로 사가미들웨어가 걸려져 있다고 해서 반드시 사가함수를 사용할 필요가 없다
단순 리덕스를 사용하면 action 값안에 payload가 존재하는데 이 값이 바로
내가 리덕스에 저장할 값인데 보통 payload에는 비동기 통신의 결과값을 저장 시킴으로써
그 결과를 리덕스에 저장한다 .
리덕스 퍼시스트는 내가 만든 리듀서를 persist와 합친다
그 값을 스토어의 리듀서 값으로 설정한다
그 합친 스토어를 _App으로 가져와서 최상위 태그인 PersistGate로 감싼다
새로고침시 reducer 함수가 아닌 persist 함수가 요청함수로 실행하면서
REHYDRATE가 실행되서 기존의 상태값이 새로고침에도 불구하고 사라지지 않고 보존된다.