일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 한국건설관리시스템
- 제네릭
- EnhancedFor
- 집합_SET
- 예외미루기
- 대덕인재개발원
- GRANT VIEW
- 메소드오버로딩
- 인터페이스
- 생성자오버로드
- 참조형변수
- oracle
- cursor문
- 컬렉션 타입
- 컬렉션프레임워크
- 다형성
- Java
- exception
- 오라클
- 자동차수리시스템
- 사용자예외클래스생성
- 정수형타입
- 어윈 사용법
- abstract
- 환경설정
- 추상메서드
- 자바
- 객체 비교
- NestedFor
- 예외처리
- Today
- Total
거니의 velog
(4) 리덕스 라이브러리 이해하기 1 본문
* 리덕스는 가장 많이 사용하는 리액트 상태 관리 라이브러리이다. 리덕스를 사용하면 컴포넌트의 상태 업데이트 관련 로직을 다른 파일로 분리시켜서 더욱 효율적으로 관리할 수 있다. 또한, 컴포넌트끼리 똑같은 상태를 공유해야 할 때도 여러 컴포넌트를 거치지 않고 손쉽게 상태 값을 전달하거나 업데이트할 수 있다.
* 리덕스 라이브러리는 전역 상태를 관리할 때 굉장히 효과적이다. 물론 리덕스를 사용하는 것이 유일한 해결책은 아니다. 이전에 배운 Context API를 통해서도 똑같은 작업을 할 수 있다. 리액트 v16.3이 릴리즈되면서 Context API가 개선되기 전에는 사용 방식이 매우 불편했기 때문에 주로 리덕스를 사용해 전역 상태 관리를 해 왔다.
* 단순히 전역 상태 관리만 한다면 Context API를 사용하는 것만으로도 충분하다. 하지만 리덕스를 사용하면 상태를 더욱 체계적으로 관리할 수 있기 때문에 프로젝트의 규모가 클 경우에는 리덕스를 사용하는 편이 좋다. 코드의 유지 보수성도 높여 주고 작업 효율도 극대화해 주기 때문이다. 추가로 아주 편리한 개발자 도구도 지원하며, 미들웨어라는 기능을 제공하여 비동기 작업을 훨씬 효율적으로 관리할 수 있게 해 주기도 한다.
* 이번 실습은 다음과 같은 흐름으로 진행된다.
1. 개념 미리 정의하기
* 앞으로 리덕스를 사용하면서 접하게 될 키워드의 개념을 우선 간략히 알아보겠다. 도중에 잘 이해되지 않는 내용은 나중에 직접 사용해 본 다음 이 절로 다시 돌아와서 읽으면 더욱 잘 이해될 것이다.
(1) 액션
* 상태에 어떠한 변화가 필요하면 액션(action)이란 것이 발생한다. 이는 하나의 객체로 표현되는데, 액션 객체는 다음과 같은 형식으로 이루어져 있다.
{
type: 'TOGGLE_VALUE'
}
* 액션 객체는 type 필드를 반드시 가지고 있어야 한다. 이 값을 액션의 이름이라고 생각하면 된다. 그리고 그 외의 값들은 나중에 상태 업데이트를 할 때 참고해야 할 값이며, 작성자 마음대로 넣을 수 있다.
* 예시 액션을 한번 살펴 보자.
{
type: 'ADD_TODO',
data: {
id: 1,
text: '리덕스 배우기'
}
}
{
type: 'CHANGE_INPUT',
text: '안녕하세요'
}
(2) 액션 생성 함수
* 액션 생성 함수(action creator)는 액션 객체를 만들어 주는 함수이다.
function addTodo(data) {
return {
type: 'ADD_TODO',
data
};
}
// 화살표 함수로도 만들 수 있다.
const changeInput = text => ({
type: 'CHANGE_INPUT',
text
});
* 어떤 변화를 일으켜야 할 때마다 액션 객체를 만들어야 하는데 매번 액션 객체를 직접 작성하기 번거로울 수 있고, 만드는 과정에서 실수로 정보를 놓칠 수도 있다. 이러한 일을 방지하기 위해 이를 함수로 만들어서 관리한다.
(3) 리듀서
* 리듀서(reducer)는 변화를 일으키는 함수이다. 액션을 만들어서 발생시키면 리듀서가 현재 상태와 전달받은 액션 객체를 파라미터로 받아 온다. 그리고 두 값을 참고하여 새로운 상태를 만들어서 반환해 준다.
* 리듀서 코드는 다음과 같은 형태로 이루어져 있다.
const initialState = {
counter: 1
};
function reducer(state = initialState, action {
switch (action.type) {
case INCREMENT:
return {
counter: state.counter + 1
};
default:
return state;
}
}
(4) 스토어
* 프로젝트에 리덕스를 적용하기 위해 스토어(store)를 만든다. 한 개의 프로젝트는 단 하나의 스토어만 가질 수 있다. 스토어 안에는 현재 애플리케이션 상태와 리듀서가 들어가 있으며, 그 외에도 몇 가지 중요한 내장 함수를 지닌다.
(5) 디스패치
* 디스패치(dispatch)는 스토어의 내장 함수 중 하나이다. 디스패치는 '액션을 발생시키는 것'이라고 이해하면 된다. 이 함수는 dispatch(action)과 같은 형태로 액션 객체를 파라미터로 넣어서 호출한다.
* 이 함수가 호출되면 스토어는 리듀서 함수를 실행시켜서 새로운 상태를 만들어 준다.
(6) 구독
* 구독(subscribe)도 스토어의 내장 함수 중 하나이다. subscribe 함수 안에 리스너 함수를 파라미터로 넣어서 호출해 주면, 이 리스너 함수가 액션이 디스패치되어 상태가 업데이트될 때마다 호출된다.
const listener = () => {
console.log('상태가 업데이트 됨');
}
const unsubscribe = store.subscribe(listener);
unsubscribe(); // 추후 구독을 비활성화할 때 함수 호출
'React > React_리액트 심화' 카테고리의 다른 글
(6) 리덕스를 사용하여 리액트 애플리케이션 상태 관리하기 1 (0) | 2023.12.13 |
---|---|
(5) 리덕스 라이브러리 이해하기 2 (0) | 2023.12.13 |
(3) Context API 3 (0) | 2023.12.13 |
(2) Context API 2 (0) | 2023.12.13 |
(1) Context API 1 (0) | 2023.12.12 |