Koras02
Koras02코딩웹
Koras02
전체 방문자
오늘
어제
  • 분류 전체보기 (299)
    • 백엔드 (59)
      • nestjs (2)
      • Ruby (3)
      • PostgresQL (11)
      • MySQL (5)
      • Haskell (7)
      • Koa (3)
      • Java (3)
      • Python (5)
      • Rust (5)
      • MongoDB (2)
      • PHP (3)
      • Spring Boot (1)
      • redis (5)
      • deno (2)
    • 웹서버 (3)
      • nginx (1)
      • Apache (2)
      • Google Web Server (0)
    • 모바일개발 (5)
      • Figma (0)
      • React Native (2)
      • swift (0)
      • Flutter (3)
      • Kotlin (0)
    • 프론트 엔드 (158)
      • HTML (34)
      • CSS (7)
      • Javascript (35)
      • Angular (0)
      • Typescript (2)
      • React (58)
      • Vue (2)
      • GIT (6)
      • GraphQL (1)
      • Doker (4)
      • Go (8)
      • svelte (1)
      • gatsby (0)
    • etc. (47)
      • Notion (0)
      • TIL (24)
      • Algorithm (17)
      • Algorithm 개념 정리 (2)
      • Wiki (3)
      • Official document (1)
    • 웹개념 (12)
    • 변수정리 (1)
    • VSCode (2)
    • 포트폴리오 분석 (2)
      • React (2)
    • os (5)
      • 윈도우 (4)
      • Mac (0)
      • 가상머신 (0)
      • linux (1)
    • 응용프로그램언어 (2)
      • C (2)
      • C++ (0)
      • C# (0)
    • 블로그 운영관련 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
글쓰기

공지사항

  • [공지사항] 개발 이슈나 공식문서 업데이트 업로드 예정입니⋯

인기 글

태그

  • React
  • 문자열
  • koa
  • 하스켈
  • html5
  • 알고리즘
  • Rust
  • mysql
  • Til
  • PostgreSQL
  • go
  • Java
  • javascript
  • redis
  • Haskell
  • 데이터 타입
  • Flutter
  • html
  • 프로그래머스
  • CSS

티스토리

최근 댓글

최근 글

250x250
hELLO · Designed By 정상우.
Koras02

Koras02코딩웹

[React] React Immutable
프론트 엔드/React

[React] React Immutable

2022. 1. 17. 14:42
728x90

Immutable 이란?

immutable은 react와 마찬가지로 페이스북 팀에서 만든 상태관리 라이브러리다. 불편함(Immutablity)를 

지키며 상태관리하는 것을 편리하게 해준다.

 

설치법

npm install immutable

 

Immutable의 필요성

Immutable은 이름에서도 알 수 있듯 객체의 불변성을 제공하는 라이브러리이다.

react의 컴포넌트는 state 또는 상위 컴포넌트에서 전달받은 props(상태값)이 변할 때 리렌더링된다.

만약 직접 객체안에 내부 값을 직접 수정한다면 레퍼런스가 가리키는 곳은 같기 때문에 똑같은 값으로 인식한다.

 

따라서, 전개 연산자나 assgin함수를 이용하여 새로운 객체나 배열을 만들었지만 구조가 복잡할 경우에는 

그 코드 또한 복잡한 방식으로 구성되었다.

 

const obj1 = {
   a: 1,
    b: 2,
     c: {
       d: 3,
        e: {
           f: 4
        }
     }
}


// f값을 5로 업데이트 객체 반환 
const obj2 = {
   ..obj1,
   c: {
      ...obj1.c,
      e: {
        f: 5
      }
   }
}

 

이런 작업을 간소화하기 위해서는 Immutable.js라이브러리를 사용한다. 라이브러리를 사용해 위 코드를 다음과

같이 변경할 수 있다.

import { Map } from "immutable";

const obj1 = Map({
   a: 1,
    b: 2,
     c: Map({
       d: 3,
         e: Map({
            f: 4
         })
     })
})

// f를 5로 업데이트 새로운 객체로 반환
const obj2 = obj1.setIn(['c', 'e', 'f'],5);

Immutable의 규칙

  • 객체: Map 함수
  • 배열: List 
  • 설정: Set
  • 읽음: Get 
  • 읽은 다음 설정: update
  • 내부에 있는 값에 대한 작업: 뒤쪽에 ln(setIn, getIn, updateIn)
  • 일반 자바스크립트 객체로 변환: toJS
  • List엔 배열 내장함수와 비슷한 함수들이 존재(push, slice, filter, sort, concat...)
  • 특정 key값을 삭제 / List에서 원소 삭제: delete

정리

react에서 state를 업데이트 할 떄에는 언제나 불변함을 유지시켜주어야 한다. 기존의 Javascript 기능만을 사용해 

충분히 불변함을 유지할 수 있지만, state의 구조가 조금 복잡할 경우 사용한다면 더욱 효과적으로 사용할 수 있다.

 

Reference

 

[TIL] React Immutable

불변성?

velog.io

 

'프론트 엔드 > React' 카테고리의 다른 글

[React] React - Next Router vs React Router  (0) 2022.01.17
[React] Virtual DOM 이란?  (0) 2022.01.16
[React] React 조건부 렌더링  (0) 2022.01.16
    '프론트 엔드/React' 카테고리의 다른 글
    • [React] Container-Presenter 패턴
    • [React] React - Next Router vs React Router
    • [React] Virtual DOM 이란?
    • [React] React 조건부 렌더링
    Koras02
    Koras02
    현재 사용중인 언어 - next-js,react,vue, typescript

    티스토리툴바