옝옹
냠
옝옹
전체 방문자
오늘
어제
  • 분류 전체보기 (84)
    • [LG유플러스]유레카 SW (5)
    • React (20)
    • JS (17)
    • TypeScript (5)
    • CSS & HTML (1)
    • 알고리즘 (11)
    • JAVA (20)
    • GIT (1)
    • 자격증 (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 리액트
  • do-while문
  • 자바스크립트
  • 변수선언
  • 노마드코더
  • TypeScript
  • JavaScript
  • 타입변환
  • java
  • 혼자공부하는자바
  • 타입스크립트
  • 자바
  • 인스턴스멤버
  • js
  • 자바스트립트
  • useCallback
  • match()
  • join() 메서드
  • switch문
  • template literal
  • indexOf()
  • join()
  • useRef
  • Node.js
  • useState
  • toFixed
  • reverse() 메서드
  • 백준
  • fillter
  • 리액트를다루는기술
  • break문
  • 템플릿리터럴
  • useMemo
  • java.util패키지
  • reduce
  • 기본api클래스
  • sort() 메서드
  • While문
  • map
  • 혼자 공부하는 자바
  • 코드스플리팅
  • map() 함수
  • 정적멤버
  • ==
  • 함수선언
  • 화살표함수
  • useEffect
  • 접근제한자
  • java.lang패키지
  • continue문

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
옝옹

냠

JS

[JS] Redux 리덕스

2025. 1. 8. 03:30

Redux 란

리덕스는 JS 상태 관리 라이브러리입니다.

쉽게 설명하면 모든 컴포넌트에서 바로 state에 접속 가능한 저장소 입니다.

(도서관에서는 다양한 사람들이 책을 빌려갈 수 있습니다)

 

상태?

component 안에서 관리되는 것

 

사용하는 이유

자식 컴포넌트가 많아지면, 상태를 관리하는 상위 컴포넌트에서 계속 내려 받아야한다. => Props drilling 이슈

리덕스를 사용하면 state를 컴포넌트에 종속시키지 않고, 상태 관리를 컴포넌트의 바깥에서 관리 할 수 있게 된다.

 

기본 용어

- Store (스토어)

상태가 저장되는 저장소

 

- Reducer (리듀서)

특정 action에 따라서 state값을 변경하는 함수

이벤트 핸들러와 비슷

파라미터는 state, action 두개를 받음

 

- Action (액션) - 주문서

store에 운반할 데이터

 

- Dispatcher(디스패처)

dispatch() 메소드를 사용해 action을 reducer에 전달

: 스토어에 상태를 변경하라고 말해줌

컴포넌트에서 사용된다.

 

동작 방식

1. action객체가 dispatch 메소드에 전달

2. dispatch를 통해 reducer를 호출

3. reducer를 통해 state 변경

4. 변경되면 리렌더링

 

3 원칙

1. 애플리케이션의 모든 상태(state)는 하나의 저장소(store) 안에 하나의 객체 트리 구조로 저장된다.

하나의 저장소(store)가 존재하며, 이 저장소(store)에는 애플리케이션의 모든 상태들이 객체 트리 구조로 저장되어 있다.

 

2. 상태(state)는 읽기 전용(read-only)이다.

상태(state)는 읽기 전용이다. 상태를 변화시키는 유일한 방법은 액션 객체를 전달하는 방법뿐이다.

 

3. 변화는 순수 함수로 작성되어야 한다.

리듀서는 그저 이전 상태와 액션을 받아 다음 상태를 반환하는 순수함수이다. 이전 상태를 변경하는 것이 아니라, 새로운 상태 객체를 생성해서 반환해야한다는 사실을 기억해야 한다.

 

더보기

createStore를 손코딩 해보세요

const store = createStore(reducer)
const reducer = (state, action) => {
	switch(action.type) {
		case "ADD" :
        	return state+1;
        case "MINUS" :
        	return state-1;
		default :
        	return state
	}
}

 

React-redux에서는 뭐가 다른가 !

1. store.js 파일 만든다.

2.  index.js파일에서 <Provider store={import한것}> 으로 <App /> 을 감싸준다.

3. useSelector : store에 저장된 state가져오기

4. useDispatch : dispatch 사용하기 위함

import { useSelector, useDispatch } from "react-redux";
import { changeName } from "../store";

function 컴포넌트() {
    let state = useSelector((state) => { return state })
    let dispatch = useDispatch();
    
    ...
    
    return (
    	<div>
            <button onClick={ () => { dispatch(changeName()) }}>
            버튼
            </button>
        </div>
    );
}

 

redux toolkit 

1. createSlice

: state를 생성할 수 있다.

2. configureStore()

모든 컴포넌트가 마음대로 사용 가능하게 해줌

import { configureStore, createSlice } from '@reduxjs/toolkit'

let 변수 = createSlice({
    name: 이름변수,
    initialState: 'hello',
    reducers : {
    	changeName(state) {
        	return '변경하기 ' + state
        }
    }
});

export let { changeName } = 변수.actions

export default configureStore({
	reducer: {
    	변수2: 변수.reducer
    },
});

 

 

redux-saga

redux-saga는 redux-thunk 다음으로 가장 많이 사용되는 비동기 작업 미들웨어입니다.

  • 미들 웨어란 ?
    • action이 발생하면 reducer가 액션을 처리하기 전에 다양한 작업을 할 수 있다.

조금더 까다로운 상황에서 유용함

  1. 비기존 요청을 취소 처리 할 수 있습니다
  2. 웹소켓을 사용할 때
  3. API 요청이 실패시 재요청해야할 때

이 외에도 다양한 까다로운 비동기 작업들을 redux-saga를 사용하여 처리 할 수 있습니다.

 

Generator 문법

  • Generator 함수는 함수의 흐름을 도중에 멈춰놓았다가 나중에 이어서 진행 할 수 있음
    • 제너레이터 함수를 만들 때에는 function* 이라는 키워드를 사용합니다.
    • 제너레이터 함수를 호출했을때는 한 객체가 반환되는데요, 이를 제너레이터라고 부릅니다.
    • 제너레이터 함수를 호출한다고 해서 해당 함수 안의 코드가 바로 시작되지는 않습니다. generator.next() 를 호출해야만 코드가 실행되며, yield를 한 값을 반환하고 코드의 흐름을 멈춥니다.
저작자표시 비영리 변경금지 (새창열림)

'JS' 카테고리의 다른 글

[JS] 정규 표현식  (0) 2024.12.26
[Javascript] for, foreach  (2) 2024.02.02
[js] toFixed() 메서드  (0) 2023.02.05
[JS] 배열의 순서 (sort()메서드, reverse() 메서드)  (1) 2023.02.03
[JS]BigInt  (0) 2023.01.31
    'JS' 카테고리의 다른 글
    • [JS] 정규 표현식
    • [Javascript] for, foreach
    • [js] toFixed() 메서드
    • [JS] 배열의 순서 (sort()메서드, reverse() 메서드)
    옝옹
    옝옹

    티스토리툴바