본문 바로가기
프로그래밍/React

[React] 기초 정리

by CaffeLatte 2020. 2. 22.

import와 require의 비교
- require는 node의 모듈 시스템
- module.exports에서 exports 되는 게 객체나 배열이면 구조 분해할 수 있음
- module.exports는 export default와 호환됨(깊게 들어가면 다르지만 react에서는 호환되는 정도로 이해하면 됨)
- const React = require('react');는 import React from 'react';와 호환됨
- import React, { Component } from 'react';에서 { Component }는 export const Component와 같이 선언된 것을 가져올 때 사용
- import 관련 부분은 react에서 사용
- require 관련 부분은 node에서 사용

map
- react가 key를 보고 같은 component인지 판단함
- .map(v, i)에서 key={i}로 사용하면 성능 최적화에 문제가 생김(단, 요소가 추가만 되는 배열인 경우 i를 써도 됨),
key를 기준으로 요소를 추가하거나 수정/삭제를 판단하기 때문에 배열의 순서가 바뀌면 문제가 생김

state
- array에 push()를 사용하면 react는 array의 변경을 감지하지 못해 render()를 호출하지 않음,
그래서 array에 값을 변경할 때는 ...연산자를 사용하거나 깊은 복사가 되도록 해야 함

props
- 자식 component에게 전달하는 값

주석
- jsx에서는 {/* */}

PureComponent와 React.memo
- shouldComponentUpdate()를 내부적으로 처리하여 불필요한 렌더링을 방지
- 자식들이 모두 적용되어 있으면 부모에도 적용
- shouldComponentUpdate()로 특정한 값만 변경하지 않도록 설정할 때는 Component를 사용해서 처리

React.createRef
- createRef()를 사용 시 current가 추가됨(ex. this.inputRef.current.focus())
- 기존의 (c) => this.inputRef = c는 다른 추가적인 기능을 포함하려 할 때 유용
- 두 가지 모두 동일한 기능이나 custom 한 기능의 유무에 따라 구분되어 사용하면 좋을 듯

props와 state 연결하기
- render() 안에는 setState() 사용금지(무한루프 되기 때문에)
- 부모로부터 받은 props는 자식이 직접 수정하면 안 되고 const [value, setValue] = useState(props.value); 처럼 state로 만든 후에 변경
- constructor안에 this.state = {}를 사용할 때는 좀 더 정밀한 작업이 필요할 때 사용하고, 그 외에는 state = {}로 사용

조건문
- false, undefined, null은 jsx에서 태그 없음을 의미

useRef
- 함수형 컴포넌트에서 ref를 쉽게 사용할 수 있게 해 줌
- useRef는 return을 다시 실행하지 않음
- 화면은 바뀌지 않고 값이 자주 바뀌는 경우

라이프사이클
- componentDidMount()는 컴포넌트가 첫 렌더링 된 후 실행됨
- compnentWillUnmount()는 컴포넌트가 제거되기 직전에 실행됨
- componentDidUpdate()는 리렌더링 후 실행됨
- 클래스의 경우 > constructor > render > ref > componentDidMount
- setState/props 바뀔 때 > shouldComponentUpdate(true) > render > componentDidUpdate
- 부모가 자식 컴포넌트를 없앴을 때 > componentWillUnmount > 소멸

고차함수
- 아래 코드가 고차함수를 적용한 부분
- 주석('//') 부분은 기존 사용 방법

class HighOrderComponent extends Component {
  onClickBtn = (name) => () => {}
  // onClickBtn = (name) => {}
    
  render() {
    return (
      ...
      <button onClick={this.onClickBtn('test')}>테스트</button>
      {/*<button onClick={() => this.onClickBtn('test')}>테스트</button>*/}
      ...
    )
  }
}

useEffect
- componentDidMount, componentDidUpdate, componentWillUnmount의 기능을 담당

useEffect(() => {
}, []); // 빈 배열이면 componentDidMount와 동일

useEffect(() => {
}, [inputs]); // 배열에 요소가 있으면 componentDidMount, componentDidUpdate 둘 다 실행

useEffect(() => {
  return () => {
    // componentWillUnmount
  }
}, []);

useMemo
- 함수형 컴포넌트 내부에서 발생하는 복잡한 연산을 최적화
- 렌더링 과정에서 연산을 실행하고 값이 바뀐게 아니라면 이전에 연산했던 값을 재사용
- 함수를 필요할 때만 생성할 수 있음

useCallback
- useMemo와 비슷한 함수
- 렌더링 성능을 최적화하는데 사용
- 이벤트 핸들러 함수를 필요할 때만 생성할 수 있음

useCallback(() => {
}, []); // 컴포넌트가 렌더링될 때 한 번만 생성

useCallback(() => {
  setValue(value);
}, [value]); // 배열 안의 값이 바뀔 때마다 생성
             // value의 상태가 바뀌어야하는 경우

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

[React] Editor 선정하기  (0) 2021.08.22
[React] Webpack CSS 설정 추가하기  (0) 2020.12.20
[React] immutable Failed to compile  (0) 2020.11.18
[React] Webpack 자동 빌드  (0) 2019.11.27
[React] 강좌 정리 및 초반 설정  (0) 2019.11.02

댓글