리액트 클래스형 컴포넌트 생명주기 및 사용법 정리
리액트 클래스형 컴포넌트 생명주기
클래스형 컴포넌트 예시
import React, { Component } from 'react';
class 컴포넌트명 extends Component {
// 클래스 컴포넌트 생명주기 함수 작성 위치
render() {
const { 변수명 } = this.props;
return (
// 렌더링 시 화면에 그려줄 JSX 리턴
}
}
}
export default 컴포넌트명;
공식 문서는 클래스형 컴포넌트보다 함수형 컴포넌트 사용을 권장하고 있습니다.
아래의 클래스 컴포넌트 생명주기 함수들은 컴포넌트 내에서 재정의하여 사용할 수 있습니다.
컴포넌트 생성 시 실행되는 함수
constructor(props) {
super(props);
// 렌더링 전 처리 (state 초기값 설정 등)
}
컴포넌트 렌더링, 리렌더링 전 실행되는 함수
static getDerivedStateFromProps(nextProps, prevState) {
if (nextProps.변수명 !== prevState.변수명) {
return { 변수명: nextProps.변수명 };
}
return null;
}
마운트(첫 렌더링), 업데이트(리렌더링) 전 호출되는 함수입니다. props로 받은 값을 return 하여 state를 변경할 수 있습니다.
컴포넌트 리렌더링 직전 실행되는 함수
shouldComponentUpdate(nextProps, nextState) {
if (nextState.변수명 === '조건') {
return true;
}
return false;
}
리렌더링 시 render 함수 직전 호출되는 함수입니다. 렌더링 여부를 return 할 수 있습니다.
컴포넌트 렌더링 시 실행되는 함수
render() {
return (
// 렌더링 시 화면에 그려줄 JSX 리턴
)
}
함수형 컴포넌트에서는 render 없이 return하여 컴포넌트를 렌더링 할 수 있습니다.
SVG 파일 렌더링 예시
return (
<svg
width={width}
height={height}
viewBox={`0 0 ${width} ${height}`}
fill={fill}
xmlns="http://www.w3.org/2000/svg"
>
<path d="M18 0H9v2.5h9V0z" fill={stroke} />
<path
opacity=".45"
fillRule="evenodd"
clipRule="evenodd"
d="m23.358 7.298-1.656 1.657A10.493 10.493 0 0 1 13.5 26C7.69 26 3 21.3 3 15.5 3 9.702 7.702 5 13.5 5c2.473 0 4.748.863 6.557 2.31l1.656-1.657c.595.49 1.144 1.05 1.645 1.645zM14.5 17H12v-6h2.5v6z"
fill={stroke}
/>
</svg>
)
위와 같이, 수학 공식으로 이미지를 저장하는 svg 파일 태그를 return하여 그려주는 것도 가능합니다.
SVG 파일은 용량이 작고 확대해도 깨지지 않으며, 웹 디자인 툴 Figma에서 디자인 후 내보내기 할 수 있습니다.
컴포넌트 첫 렌더링 후 실행되는 함수
componentDidMount() {
// 렌더링 후 Dom 업데이트 완료 시 처리
}
컴포넌트 리렌더링 후 실행되는 함수
getSnapshotBeforeUpdate(prevProps, prevState) {
if (prevProps.변수명 !== this.props.변수명) {
return '리턴값';
}
return null;
}
리렌더링 후 DOM 업데이트 전 호출되는 함수입니다. return 하면 componentDidUpdate 함수에서 snapshot 변수로 받습니다.
componentDidUpdate(prevProps, prevState, snapshot) {
// 리렌더링 후 Dom 업데이트 완료 시 처리
}
리렌더링 후 DOM 업데이트가 완료되면 호출되는 함수입니다.
컴포넌트 제거 전 실행되는 함수
componentWillUnMount() {
// 마운트 해제되어 화면에서 Dom이 제거되기 전 처리
}
리액트 클래스형 컴포넌트 사용법
부모 컴포넌트에서 파라미터 넘겨주는 방법
함수명() {
// 함수 처리
}
render() {
const 변수명 = 값;
<하위컴포넌트명 파라미터명1={변수명} 파라미터명2={() => this.함수명()} />
}
위와 같이 부모 컴포넌트 렌더 시 하위 컴포넌트에 파라미터를 넘겨주면, 하위 컴포넌트에서 this.props.파라미터명으로 받을 수 있습니다.
부모 컴포넌트에서 받은 함수 실행 방법
this.props.파라미터명();
현재 컴포넌트 state에 데이터 저장 방법
this.state = {
변수명1: this.props.파라미터명,
변수명2: '데이터',
리스트명: { 변수명: 값 }
};
현재 컴포넌트 state 변경 방법
this.setState({
변수명1: '변경데이터',
변수명2: '변경데이터'
});
this.setState((state) => { 변수명: state.변수명 + 1 });
this.setState({
리스트명: this.state.리스트명.set('변수명', '변경데이터')
});
setState 함수를 사용하지 않고 직접 state를 수정하면, 바뀐 state로 render 함수를 호출하지 않아 리렌더링이 안될 수 있습니다.
현재 컴포넌트 state에 저장된 데이터 꺼내는 방법
this.state.get('변수명');
this.state.리스트명.get('변수명');
Leave a comment