beecomci / today_i_learned

0 stars 0 forks source link

[React-Basic-Hooks] 5. React Component 이해 #9

Open beecomci opened 3 years ago

beecomci commented 3 years ago

React Component 이해 #

Component 구현 2가지 방법

  1. Function Component

    • props 넘겨서 react element return
      
      // with destructuring & arrow function
      const Greeting = ({ name = '아무개' }) => (
      <div>
      안녕하세요~ <b>{name}</b>님
      </div>
      );

    // 사용 예시 (react component를 인스턴스화) () => ;

  2. Class Component : Extends React.Component(or React.PureComponent)

    import { Component } from 'react'
    
    class GreetingClassComponent extends Component {
    render() { // 내부 render 메소드 사용
      return <div>안녕하세요~ <b>{this.props.name}</b>님</div>; // this.props : class 내부 변수로 존재
    }
    }
    
    // 사용 예시 
    () => <GreetingClassComponent name="유진"/>;

props

All React components must act like pure functions with respect to their props.

  • 순수 함수 : 동일한 param이 들어가면 결과가 항상 동일해야 함
  • 같은 props가 들어가면 동일한 rendering이 되어야 함

Children

beecomci commented 3 years ago

Reconciliation

React는 2가지를 이용해서 DOM 트리 탐색 알고리즘의 복잡도를 O(n)으로 줄임

  1. 부모 노드 타입이 다르면 자식 노드는 비교하지 않는다.
  2. 노드에 key를 부여하면 일일이 탐색하지 않고 접근 가능하다.

1. 부모 노드 타입이 다르면 자식 노드는 비교하지 않는다.

2. 노드에 key를 부여하면 일일이 탐색하지 않고 접근 가능하다.

// 리스트 맨 앞에 노드가 추가되어 전체적인 순서가 달라져서 모든 자식 노드들을 변경해야함 -> 리소스 낭비


- 그래서 반복되는 노드에 `key`를 부여 
- 그러면 노드 순서가 바뀌어도 기존 노드들은 그대로 두고 바뀐 노드만 렌더링 가능, 서브 트리 내에서만 unique하면 되고 전역에서 unique할 필요 X
- 배열의 index를 key로 사용하는 것은 지양 -> 항목의 순서가 바뀔 경우, key도 바뀌고 그 결과로 component의 state가 의도대로 동작하지 않을 수 있음