리액트 공식문서 읽기 - 주요개념(State)

2024. 3. 19. 09:12·웹 프로그래밍/React
반응형

State

`state`: 리액트 컴포넌트에서 동적으로 변화하는 값을 관리하기 위해 사용되는 객체

State를 올바르게 사용하기

`setState()`: 컴포넌트의 state 객체에 대한 업데이트를 실행하는 함수. state가 변경되면 컴포넌트는 리렌더링 된다.

 

setState()에 대해 알아야 할 것

1. 직접 State 수정 금지

//❌
this.state.comment = 'Hello';

//⭕
this.setState({comment: 'Hello'});
  • `setState()`를 이용해 state 값을 변경해야 한다.
  • `this.state`는 constructor에서만 지정할 수 있다. 

2. State 업데이트는 비동기적일 수 있다.

React는 성능을 위해 `setState()` 호출을 단일 업데이트로 한꺼번에 처리할 수 있다. 

이에 따라 `this.props`와 `this.state`가 비동기적으로 업데이트될 수 있으므로 다음 state 계산 시 해당 값에 의존해서는 안된다.

//❌
this.setState({
  counter: this.state.counter + this.props.increment,
});

//⭕
this.setState((state, props) => ({
  counter: state.counter + props.increment
}));

첫 번째 코드는 카운터 업데이트에 실패할 수도 있는 코드이다.

이 코드를 수정하기 위해서는 두 번째 코드처럼 함수를 인자로 사용하는 다른 형태의 `setState()`를 사용한다.

해당 함수는 이전 state를 첫 번째 인자로 받고, 업데이트가 적용된 시점의 props를 두 번째 인자로 받는다.

 

3. State 업데이트는 병합된다.

`setState()`를 호출할 때 React는 제공한 객체를 현재 state로 병합한다.

constructor(props) {
    super(props);
    this.state = {
      posts: [],
      comments: []
    };
  }

state는 위와 같이 다양한 독립적이 변수를 포함할 수 있다. (posts, comments,...)

이러한 변수는 `setState()` 호출을 통해 독립적으로 업데이트할 수 있다. 

 componentDidMount() {
    fetchPosts().then(response => {
      this.setState({
        posts: response.posts
      });
    });

    fetchComments().then(response => {
      this.setState({
        comments: response.comments
      });
    });
  }

병합은 얕게 이루어지므로, `this.setState({comments})`는 `this.state.posts`에 영향을 주지 않는다.

대신 `this.state.comments`는 새로 설정한 값으로 완전히 대체된다. 

 

 

데이터는 아래로 흐른다.

state를 이용해 컴포넌트를 관리하면 state가 소유/설정한 컴포넌트 이외에는 어떠한 컴포넌트에도 접근할 수 없다.

따라서 state는 로컬 또는 캡슐화라 불리기도 한다. 

부모/자식 컴포넌트 역시 마찬가지로, 자식/부모 컴포넌트에 접근이 불가하다.

대신 부모 컴포넌트는 자신의 state를 자식 컴포넌트에 props로 전달할 수 있다.

<FormattedDate date={this.state.date} />
function FormattedDate(props) {
  return <h2>It is {props.date.toLocaleTimeString()}.</h2>;
}

FormattedDate 컴포넌트는 date를 props로 받지만 해당 date의 값 이외에 어떤 정보도 알 수 없다.

 

👉 일반적으로 이를 "하향식" 또는 "단방향식" 데이터 흐름이라고 한다. 모든 state는 항상 특정 컴포넌트 소유이고 그 state로부터 파생된 UI 및 데이터는 오직 트리구조에서 그 자신의 아래에 있는 컴포넌트에만 영향을 미친다.

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'웹 프로그래밍 > React' 카테고리의 다른 글

리액트 공식문서 읽기 - 주요개념(Components와 Props)  (0) 2024.03.18
리액트 공식문서 읽기 - 주요개념(엘리먼트 렌더링)  (0) 2024.03.18
리액트 공식문서 읽기 - 주요개념(Hello World, JSX 소개)  (0) 2024.03.18
리액트 공부 내용 정리  (0) 2023.09.14
[React] 상위 컴포넌트에서 하위 컴포넌트로 데이터 전달하기(props)  (0) 2023.09.05
[React] Link to 밑줄 없애기  (0) 2022.04.10
'웹 프로그래밍/React' 카테고리의 다른 글
  • 리액트 공식문서 읽기 - 주요개념(Components와 Props)
  • 리액트 공식문서 읽기 - 주요개념(엘리먼트 렌더링)
  • 리액트 공식문서 읽기 - 주요개념(Hello World, JSX 소개)
  • 리액트 공부 내용 정리
청량리 물냉면
청량리 물냉면
프로그래밍 공부를 하고 있습니다. 공부 내용 정리 겸 정보 공유를 목적으로 합니다.
    반응형
  • 청량리 물냉면
    노력중인 블로그
    청량리 물냉면
  • 전체
    오늘
    어제
    • 분류 전체보기 (505)
      • 프로그래밍 (41)
        • Programming (1)
        • C | C++ (6)
        • Java (28)
        • Python (5)
      • 웹 프로그래밍 (108)
        • HTML | CSS (5)
        • JavaScript | TypeScript (41)
        • React (25)
        • Vue.js (0)
        • Next.js (18)
        • Spring & Spring Boot (13)
        • JSP & Servlet (1)
        • DB (4)
      • 웹 프로젝트 (77)
        • 웹 프로젝트 (22)
        • 🥨스낵몰 (3)
        • 👨‍👨‍👧‍👧소셜 가계부 (26)
        • 🌜꿈 일기장 (11)
        • 🔮포트폴리오 사이트 (11)
        • 🏃‍♂️팀 프로젝트: 일정관리 프로그램 (0)
        • 📈팀 프로젝트: AI기반 주식 분석 플랫폼 (0)
        • 😺Just Meow It: 조언 사이트 (2)
        • 📕Workly: 교대근무 다이어리 (1)
      • 앱 프로그래밍 (26)
        • Flutter (24)
        • Kotlin (2)
      • Problem Solving (166)
        • 백준 (52)
        • 프로그래머스 (79)
        • SWEA (29)
      • Computer Science (40)
        • 알고리즘 (14)
        • 컴퓨터 네트워크 (18)
        • 이산수학 (8)
      • Developer (47)
        • 후기 (4)
        • 자료정리 (4)
        • 취업 | 취준 (9)
        • SSAFY (1)
        • 웹개발 교육 프로그램 (9)
        • TIL (20)
  • 블로그 메뉴

    • 홈
    • Github
  • 공지사항

    • 프로그래밍 공부 중😊
  • 인기 글

  • 태그

    SWEA
    자바스크립트
    플러터
    자바
    AWS
    웹사이트
    mysql
    프로그래머스
    Next.js
    프로젝트
    React
    알고리즘
    뉴렉처
    d3
    bfs
    파이썬
    구현
    공식문서
    리액트
    Jiraynor Programming
    포트폴리오
    클론 프로젝트
    강의내용정리
    컴퓨터네트워크
    Til
    spring boot
    백준
    타입스크립트
    블로그 제작
    ZeroCho
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
청량리 물냉면
리액트 공식문서 읽기 - 주요개념(State)
상단으로

티스토리툴바