16.2 리액트 없이 쓰는 리덕스
- 리덕스는 리액트에 종속되는 라이브러리가 아니다.
- angular-redux, ember redux, Vue에서도 사용 가능, Vue에서는 리덕스와 유사한 vuex를 주로 사용
- 바닐라(vanilla) 자바스크립트와 함께 사용할 수도 있다.
🔷 바닐라 자바스크립트 : 라이브러리나 프레임워크 없이 사용하는 순수 자바스크립트 그 자체
1️⃣ 액션 타입과 액션 생성 함수 정의
- 액션 : 프로젝트의 상태에 변화를 일으키는 것
- 액션 이름 : 문자열 형태, 주로 대문자 작성, 고유해야 한다.
- 액션 객체 : 반드시 type 값을 갖고 있어야 하며, 그 외에 추후 상태를 업데이트할 때 참고하고 싶은 값은 마음대로 넣을 수 있다.
// 액션 이름
const TOGGLE_SWITCH = "TOGGLE_SWITCH";
const INCREASE = "INCREASE";
const DECREASE = "DECREASE";
// 액션 생성 함수
const toggleSwitch = () => ({type: TOGGLE_SWITCH});
const increase = difference => ({type: INCREASE, difference});
const decrease = () => ({type: DECREASE});
2️⃣ 초깃값 설정
- 초기값의 형태는 자유
- 숫자일 수도 있고 문자열일 수도 있고 객체일 수도 있다.
3️⃣ 리듀서 함수 정의
- 리듀서 : 변화를 일으키는 함수
- 함수 파라미터 : state, action
// state가 undefined일 때는 initialState를 기본값으로 사용
function reducer(state = initialState, action){
// action.type에 따라 다른 작업 처리
switch(action.type){
case TOGGLE_SWITCH:
return{
...state, // 불변성 유지를 해주어야 한다.
toggle: !state.toggle
};
}
}
- 리듀서 함수가 맨 처음 호출될 때는 state값이 undefined
- 해당 값이 undefined로 주어졌을 때는 initialState를 기본값으로 설정하기 위해 함수의 파라미터 쪽에 기본값 설정
- 상태의 불변성을 유지하면서 데이터에 변화를 주어야 한다 => spread 연산자(..)사용하면 편하다.
- 객체의 구조가 복잡해지면 spread 연산자로 불변성을 관리하며 업데이트 하는 것이 굉장히 번거로울 수 있고 코드의 가독성도 나빠지기 때문에 리덕스의 상태는 최대한 깊지 않은 구조로 진행하는 것이 좋다.
- 객체의 구조가 복잡해지거나 배열도 함께 다루는 경우 immer 라이브러리를 사용하면 좀 더 쉽게 리듀서를 작성할 수 있다.
4️⃣ 스토어 만들기
- createStore 함수 사용
- 파라미터에는 리듀서 함수를 넣어 준다.
5️⃣ render 함수 만들기
- 상태가 업데이트될 때마다 호출
- 리액트의 render함수와는 다르게 이미 html을 사용하여 만들어진 UI의 속성을 상태에 따라 변경해준다.
const render = () => {
const state = store.getState(); //현재 상태를 불러온다.
//
}
render();
6️⃣ 구독하기
- subscribe 함수의 파라미터로는 함수 형태의 값을 전달해준다.
const listener = () => {
console.log("상태 업데이트");
}
const unsubscribe = store.subscribe(listener);
unsubscribe();
- 컴포넌트에서 리덕스 상태를 조회하는 과정에서 react-redux라는 라이브러리가 이 작업을 대신해주어 직접 사용하지 않을 수 있다.
7️⃣ 액션 발생시키기
- 디스패치 : 액션을 발생시키는 것
- 파라미터는 액션 객체를 넣어주면 된다.
#출처 : 리액트를 다루는 기술(저자 : 김민준 VELOPERT)
'Front-End, CS 스터디 > [도서] 리액트를 다루는 기술' 카테고리의 다른 글
[도서] 리액트를 다루는 기술 #서버 사이드 렌더링 (2) | 2022.11.01 |
---|---|
[도서] 리액트를 다루는 기술 #컴포넌트 반복 (0) | 2022.10.28 |
[도서] 리액트를 다루는 기술 #리덕스 개념 미리 정리하기 (0) | 2022.10.18 |
[도서] 리액트를 다루는 기술 #리액트의 특징 (0) | 2022.10.17 |
[도서] 리액트를 다루는 기술 #왜 리액트인가? (0) | 2022.10.13 |