react in action 1

jungeundelilahLEE·2021년 7월 30일
0

React

목록 보기
22/24
  • 상태 (state) : 특정 시점에 프로그램이 사용하고 있는 정보 (=특정 시점에 프로그램에 대해 알고 있는 것들의 스냅샷)

  • js 는 "완료될 때까지 실행"하는 속성이 있음

  • 리액트에서 데이터의 상태는,
    1) 컴포넌트 내에서 변경 가능한 데이터인 "상태"와
    2) 컴포넌트가 변경할 수 없으며, 수신만 가능한 데이터인 "속성"으로 구분

  • 리액트는 컴포넌트의 상태(state)를 setState를 이용해 변경이 가능한 가변 객체로 다루며, 속성(props)은 읽기전용으로 다룬다.

  • 리액트에서 불변 데이터를 전달하기 위한 가장 기본적인 방법은 "속성(props)"을 이용하는 것

    • 속성은 일종의 불변 데이터
    • 속성은 리액트 컴포넌트에 전달되는 데이터
    • 부모컴포넌트가 전달할 수도 or 컴포넌트 자체의 defaultProps 정적 메서드를 통해 전달할 수도
  • 컴포넌트의

    • 상태는 개별 컴포넌트가 따로 관리
    • 속성은 보통 부모 컴포넌트가 전달
  • 단방향 means 갱신된 데이터는 부모 컴포넌트로부터 자식 컴포넌트로만 전달된다는 것을 의미

    • 상태를 사용하는 부모 컴포넌트는 자신의 상태를 변경할 수 있으며,
    • 변경된 상태를 자식 컴포넌트의 속성으로 전달함으로써 속성을 변경하게 됨
  • 상태가 없는 함수형 컴포넌트는 기본적으로 함수

    • pure function
    • 불필요한 생명주기 검사 or 메모리 할당을 수행하지 않도록 최적화되어 있기 때문에 훨씬 빠르게 동작

<정리>

  • 상태(state)는 어느 특정 시점에 프로그램이 사용할 수 있는 정보들을 의미
  • 불변 상태는 변경되지 않지만, 가변 상태는 변경 가능
  • 영속적이며 불변인 데이터 구조는 변경되지 않음 / 그저 변경 내용을 기록하고 자신의 복사본을 생성할 뿐
  • 속성(props)은 의도적으로 만들어진 불변 객체이며, 한번 설정되면 수정되어서는 안 됨
  • 컴포넌트의 상태는 지원 인스턴스가 추적하며, setState 메서드를 이용해 수정 가능
  • setState 메서드는 데이터의 얕은 병합을 수행하여 컴포넌트의 상태를 갱신하며, 수정이 발생하지 않은 최상위 속성들은 그대로 보존됨
  • 리액트에서 데이터는 한쪽으로만 흐르지만, 부모 컴포넌트의 상태를 직접 수정할 수는 없으며, 부모 컴포넌트 역시 자식 컴포넌트의 상태를 직접 수정할 수 없음. 컴포넌트 간의 상호작용은 속성(props)을 통해서만 가능

생명주기

  • will vs did

    • 초기화 : 컴포넌트 클래스의 인스턴스가 생성되는 시점
    • 마운팅 : 컴포넌트가 DOM에 삽입되는 시점 (리액트가 컴포넌트를 돔에 삽입하는 과정 / 컴포넌트는 리액트가 실제 돔에 추가하기 전에는 오로지 가상 돔에만 존재한다)
    • 갱신 : 컴포넌트가 상태나 속성으로 전달된 새 데이터에 의해 갱신되는 시점
    • 언마운팅 : 컴포넌트가 DOM에서 제거되는 시점

< order >

componentWillUnmount()
⬇️

가상 DOM

⬇️ ReactDOM.render( )
생성자에서 props 및 초기 state 설정
⬇️
componentWillMount() (setState 사용 가능)
⬇️
render()
⬇️
componentDidMount() (setState 사용 가능)

  • 리액트가 이 메서드를 호출하면, 컴포넌트의 참조(ref)에 접근할 수 있으며,
  • 이 메서드에서는 컴포넌트의 상태(state)와 속성(props)에도 접근할 수 있으며,
  • 컴포넌트 갱신도 가능하다
  • (즉, 네트워크 요청의 응답으로 전달받은 데이터를 이용해서 컴포넌트 상태를 갱신하는 작업 등을 수행하기에 적절한 시점이라는 뜻)

⬇️

마운트 된다

(컴포넌트가 마운트되어있는 동안에는 실제 DOM에 존재하게 되며, 데이터의 동기화를 위해서 리액트가 지속적으로 갱신한다)
⬇️ props
componentWillReceiveProps(nextProps) () (setState 사용 가능)
⬇️
sholdComponentUpdate(nextProps, nextState)
⬇️ 실패시 다시 마운트 된다

마운트 된다

⬇️ setState ( )
componentWillUpdate(nextProps, nextState)
⬇️
render()
⬇️
componentDidUpdate(prevProps, prevState) (setState 사용 가능)
⬇️

마운트 된다 (컴포넌트가 마운트되면 갱신을 처리할 수 있다)

profile
delilah's journey

0개의 댓글