React-Native

[React-Native] Class vs Function

TrueSik 2022. 6. 1. 01:18

React에서 컴포넌트를 작성하는 방법은

클래스형(Class Component)과 함수형(Function Component) 두 가지 방법이 있다.

 

현재는 함수형 방식으로 구현을 많이한다.

하지만 클래스형 방식으로 구현이 된 프로젝트가 많기 때문에 클래스형 방식도 배워야 한다.

1. 선언

- 클래스형 컴포넌트

import React, {Component} from 'react';

class App extends Component {
  render() {
    const name = 'react native';
    return <View><Text>{name}</Text></View>
  }
}

export default App;
  • class 키워드 사용
  • Component 상속
  • render() 메서드가 반드시 있어야 함

 

- 함수형 컴포넌트

import React from 'react';

function App() {
  const name = 'react native';
  return (
    	<View><Text>{name}</Text></View>
  )
}

export default App;

OR

const App = () => {
	const name = 'react native';
  	return (
		<View><Text>{name}</Text></View>
  	)
}

export default App;
  • function 키워드 사용
  • function 키워드를 사용하지 않고 화살표 방식 함수로 선언 가능

2.  차이

- 클래스형 컴포넌트

  • state, lifeCycle API 사용 가능
  • 메모리 자원을 함수형 컴포넌트보다 조금 더 사용
  • 임의 메서드를 정의할 수 있음

- 함수형 컴포넌트

  • state, lifeCycle 관련 기능 사용 불가능 [Hook을 통해 해결됨]
  • 메모리 자원을 함수형 컴포넌트보다 덜 사용
  • 컴포넌트 선언이 편함

3. State 사용  

- 클래스형 컴포넌트

  • constructor에서 this.state 초기 값 설정 가능 ( constructor 없이 초기화 가능 )
constructor(props) {
    super(props);
    this.state = {
    	number: 0,
        list: [],
    }
}

OR

state = {
	number: 0,
	list: [],
}
  •  클래스형에서는 state는 객체 형식
  • this.setState 함수로 state의 값을 변경함.
this.setState({number: 12})

 

- 함수형 컴포넌트

  • state를 useState() 사용하여 관리함.
  • 배열의 첫 번째 요소는 현재 값
  • 배열의 두 번째 요소는 첫 번째 요소를 바꾸는 함수
  • useState(0) 함수의 () 안의 값은 초기 값을 설정 
const [number, setNumber] = useState(0);

4.  Props 사용

- 클래스형 컴포넌트

  • this.props를 통해서 props 값을 가져올 수 있음
const {number, list} = this.props;

- 함수형 컴포넌트

  • 매개변수로 받아서 바로 사용이 가능함
const App = ({number}) => {
	return <View><Text>{number}</Text></View>
}

5.  LifeCycle

  • LifeCycle API : 컴포넌트가 DOM 위에 생성되기 전 후 및 데이터가 변경되어
    상태를 업데이트하기 전 후로 실행되는 메서드

Life Cycle


6.  이벤트 핸들링

- 클래스형 컴포넌트

  • 함수 선언 시 화살표 함수로 바로 선언이 가능
  • 함수를 사용할 때 this를 사용해야 함
//함수 선언
handleChange = () => {
	this.setState({number: number + 2});
}

// 함수 사용
<TextInput 
	onChange={this.handleChange}
/>

- 함수형 컴포넌트

  • const 키워드를 사용해서 함수 선언
  • 함수를 사용할 때 this 없이 사용 가능
//함수 선언
const handleChange = () => {
	setNumber(15);
}

//함수 사용
<TextInput 
	onChange={handleChange}
/>

 

 

참고

https://velog.io/@sdc337dc/0.%ED%81%B4%EB%9E%98%EC%8A%A4%ED%98%95-%EC%BB%B4%ED%8F%AC%EB%84%8C%ED%8A%B8