본문 바로가기

카테고리 없음

Redux Basic

리액트로 개발하던 시절 react redux를 사용해 데이터 관리를 한 적이 있다.

그때는 redux를 왜쓰는지, 이게 어떤 라이브러리인지도 모르고 급하게 급하게 기존 코드를 보면서 아 이렇게 쓰는거구나 하고 사용했던 경험이 있다. 

 

누가 Redux 는 왜 쓰는거야? 하면

"data 관리하려고" 라고 뭉뚱그려 말할수밖에 없었던 시절이다.

 

 

이번에 회사에서 그룹단위 사이드 프로젝트의 React 구현부를 맡게 되었다. 거의 2년 반만에 다시 React를 사용하게 된 만큼, 감각을 되살리기 위해서 간단한 인터넷 강의를 수강할 것을 추천받았고 그 중에 Redux가 보였다.

 

이번 기회에 Redux가 무엇을 위해 사용하는 라이브러리인지 이해해보기로 했다.

 

들어가기에 앞서 Redux 에 대해 착각하고 있던 사실중 하나는

Redux가 React 라이브러리와는 종속관계가 없다는 것이다.

 

맨날 React-Redux만 사용하고, 구글에 나오는 사용 예시들도 거의 모두 React에서 Redux 를 사용하고 있어서 당연히 종속관계인줄 알았다. 참고한 강의에서는 이걸 설명하기 위해 Vanilla JS 에서 Redux를 사용하는 예시를 보여준다.

 

 

 

 

Redux 사용이유

redux를 쓰지 않으면 데이터가 여기저기서 변경될 수 있고, 변경 후에는 무조건 html의 data를 갱신해주는 작업을 매번 해야함.

 

const updateText = () => {
  number.innerText = count;
};

const handleAdd = () => {
  count = count + 1;
  updateText();
};

const handleMinus = () => {
  count = count - 1;
  updateText();
};

 

데이터 관리의 정형화

prop drilling 없이 데이터가 필요한 component에서 직접 redux와 연결해 데이터 접근, 수정 가능.

 

뭔가 동시성? 에 문제가 생기는 케이스는 없을까?

 

 

 

1. store

 

데이터를 보관하는 장소.

 

 

2. reducer

createStore할때 arg로 넣어주는 함수. 

오직 이 함수를 통해서만 data 변경이 가능

 

인자로 현재 data의 state와 action을 받음.

 

여러 action을 switch로 나눠 데이터 변경. + mutate 금지 (대신 새 객체를 return 해야함.)

 

이 reducer의 return값이 최종 data가 되는거임.

 

 

3. action, dispatch

Redux외부에서는 직접 reducer를 호출해 데이터를 수정하지 않음.

 

store.dispatch() 메서드를 action 객체를 arg로 넣어서 호출하면

dispatch 내에서 reducer(currentState, action 객체) 를 호출해주는 방식임.

 

정의된 action을 dispatch 하는 과정을 통해서만 data를 변경할 수 있는 것임. state를 dispatch action이외 다른방법으로 변경 불가

action은 무조건 type을 가진 객체여야함

 

action creater 라는 action 객체를 반환하는 함수만 따로 만들어서 책임을 분리하는게 더 common 함

 

 

 

 

 

플러스 알파

- [ ] Redux 사용이 적절한 경우와 아닌 경우 (조사가 필요할 걸)

- [ ] Redux 에서 mutate가 금지된 이유

 

실제로 프로젝트에서 사용하게 되었을 때 내용 더 추가하기