-
react lifecycle method 정리 with react-native -1 (componentDidMount, shouldComponentUpdate, componentDidUpdate, componentWillUnmount)모바일앱/react-native 2023. 2. 23. 22:03728x90반응형
* 컴포넌트가 생성될때 다음과 같은 순서로 함수가 호출됩니다.
우리는 component관련된 method에 대해 알아볼것입니다.
1. componentDidMount lifecycle method
- 컴포넌트가 첫 마운트된 직후 (react component가 생성된후), 즉 트리에 삽입된 직후에 호출됩니다. 대부분 ajax 같은 외부에서 데이터를 가져올때 사용한다.
export default class MyComponent extends Component{ constructor() { super(); this.state = {loading:true,data:{}} } componentDidMount() { setTimeout(() =>{ console.log("setTimeout"); this.setState({ loading:false, data:{name:"Nader Dabit",age:35} }) },4000) console.log("componentDidMount"); } render() { console.log("render"); if(this.state.loading){ return <Text>Loading</Text> } const {name,age} = this.state.data; return( <View> <Text > Name : {name} </Text> <Text> Age : {age} </Text> </View> ) } }
로그는 아래와 같이 찍힌다. render componentDidMount setTimeout render
2. shouldComponentUpdate lifecycle method
- render update 전에 호출됩니다. 호출시에 true,false를 반환하여 view를 업데이트 할지 안할지 결정하는 함수입니다. 예) 반환값이 false 일경우 뷰 렌더링 x , true 일경우 뷰 렌더링 o
export default class MyComponent extends Component{ constructor() { super(); this.state = {loading:true,data:{}} } componentDidMount() { setTimeout(() =>{ console.log("setTimeout"); this.setState({ loading:false, data:{name:"Nader Dabit",age:35} }) },4000) console.log("componentDidMount"); } shouldComponentUpdate(nextProps, nextState, nextContext) { console.log("shouldComponentUpdate") if(nextProps.name == this.props.name) { return true } return false } render() { console.log("render"); if(this.state.loading){ return <Text>Loading</Text> } const {name,age} = this.state.data; return( <View> <Text > Name : {name} </Text> <Text> Age : {age} </Text> </View> ) } }
로그는 아래와 같다. render componentDidMount setTimeout shouldComponentUpdate render
3.componentDidUpdate lifecycle method
- componentDidmount가 끝난후 다시한번 rerender가 일어날경우 호출 한다. 위 예에서 settimeout을 통해 state를 변경하고 두번째 리렌더링이 발생하며, 그후에 호출한다고 생각하면 된다.
import { StatusBar } from 'expo-status-bar'; import { StyleSheet, Text, View } from 'react-native'; import {Component} from "react"; export default class MyComponent extends Component{ constructor() { super(); this.state = {loading:true,data:{}} } componentDidMount() { setTimeout(() =>{ console.log("setTimeout"); this.setState({ loading:false, data:{name:"Nader Dabit",age:35} }) },4000) console.log("componentDidMount"); } shouldComponentUpdate(nextProps, nextState, nextContext) { console.log("shouldComponentUpdate") if(nextProps.name == this.props.name) { return true } return false } componentDidUpdate(prevProps, prevState, snapshot) { console.log("componentDidUpdate") } render() { console.log("render"); if(this.state.loading){ return <Text>Loading</Text> } const {name,age} = this.state.data; return( <View> <Text > Name : {name} </Text> <Text> Age : {age} </Text> </View> ) } }
로그는 아래와 같다. render componentDidMount setTimeout shouldComponentUpdate render componentDidUpdate
4. componentWillUnmount lifecycle method
-구성 요소가 마운트 해제되고 소멸되기 직전에 호출됩니다. 이 방법에서 타이머 무효화, 네트워크 요청 취소 또는 에서 생성된 구독 정리와 같은 필요한 정리를 수행합니다
class ComponentOne extends Component { // Defining the componentWillUnmount method componentWillUnmount() { console.log('The component is going to be unmounted'); } render() { return (<Text>Loadding!</Text>); } } export default class MyComponent extends Component{ constructor() { super(); this.state = {loading:true,data:{}} } componentDidMount() { setTimeout(() =>{ console.log("setTimeout"); this.setState({ loading:false, data:{name:"Nader Dabit",age:35} }) },4000) console.log("componentDidMount"); } shouldComponentUpdate(nextProps, nextState, nextContext) { console.log("shouldComponentUpdate") if(nextProps.name == this.props.name) { return true } return false } componentDidUpdate(prevProps, prevState, snapshot) { console.log("componentDidUpdate") } componentWillUnmount() { console.log("componentWillUnmount") } render() { console.log("render"); if(this.state.loading){ return <ComponentOne/> } const {name,age} = this.state.data; return( <View> <Text > Name : {name} </Text> <Text > Age : {age} </Text> </View> ) } }
log는 아래와 같습니다. render componentWillUnmount componentDidMount setTimeout shouldComponentUpdate render The component is going to be unmounted componentDidUpdate
728x90반응형'모바일앱 > react-native' 카테고리의 다른 글
android react native 실행하는법 (0) 2021.03.07 React Native 설치 및 환경설정 -windows (0) 2021.03.07