Web

React 컴포넌트 , props, state

ellapk 2021. 9. 25. 14:01

 

컴포넌트

단순한 템플릿 이상의 기능을 함. 데이터가 주어졌을 때 이에 맞추어 UI를 만들어 주거나, LifeCycle API로 컴포넌트가 화면에 나타날 때, 사라질 때, 변화가 일어날 때 주어진 작업들을 처리할 수 있고, 메서드를 만들어 특별한 기능을 붙일 수도 있다.

 

 

컴포넌트 초기 코드

MyComponent.js

import React, {Component} from 'react';

class MyComponent extends Component{
	render(){
    	return(
        	<div>
              컴포넌트
            </div>
        )
    }
}

export default MyComponent;

마지막 줄의 export는 다른 파일에서 이 파일을 import할 때 위쪽에서 선언한 MyComponent클래스를 불러오도록 설정하는 코드이다.

 

그럼 import를 하면 어떨까

 

App.js

import React, {Component} from 'react';
import MyComponent from './MyComponent'; //MyComponnet파일을 불러옴.

class App extends Component{
	render(){
    	return(
        	<MyComponent/>
        );
   }
}

export default App;

 

 

 

props

컴포넌트의 속성값

 

props렌더링 -> props값 설정 -> props 기본 값 설정 -> props 값 검증

 

props렌더링 할 때 { }안에 감싸주어야함.

this키워드를 사용하여 props에 접근한다.

import React, {Component} from 'react';

class MyComponent extends Component{
	render(){
    	return(
        	<div>
              제 이름은 {this.props.name} 입니다.
            </div>
        )
    }
}

export default MyComponent;

 

 

이번에는 name속성을 설정해보자 html태그에 속성을 설정한는 것과 비슷하다.

import React, {Component} from 'react';
import MyComponent from './MyComponent'; //MyComponnet파일을 불러옴.

class App extends Component{
	render(){
    	return(
        	<MyComponent name="React"/>
        );
   }
}

export default App;

>웹브라우저에

제 이름은 React 입니다. 

로 보인다.

 

 

 

state

컴포넌트의 상태 값

 

위에서 배운 props는 부모 컴포넌트가 설정하며, 컴포넌트 자신은 해당 props를 읽기 전용으로만 사용할 수 있기 때문에 컴포넌트 내부에서 읽고 업데이트 하기 위해서는 state를 써야한다.

state는 언제나 기본 값을 미리 설정해야 사용할 수 있으며, this.setState()메서드로만 값을 업데이트 해야한다.

 

state 초깃값 설정하기 -> state렌더링하기 -> state값 업데이트하기

 

 

state 초깃값 설정은 컴포넌트의 생성자 메서드인 constructor 내부에서 설정한다.

state에 number 값을 0으로 설정하자.

import React, {Component} from 'react';

class MyComponent extends Component{
	(...)
    constructor(props){
    	super(props);
        this.state={
        	number:0
        }
    }
    
    render(){
    	(...)
    } 
}

export default MyComponent;

 

 

이제 number값을 jsx안에서 렌더링하자. props 렌더링과 다 비슷함

render(){ 
  return(
              <div>
                  <p>제 이름은 {this.props.name}입니다. </p>
                  <p>저는 {this.props.age}살 입니다.</p>
                  <p>숫자 : {this.state.number}</p>
              </div>  
          )
}

 

state값을 업데이트하자. 이때는 this.setState()메서드를 사용한다.

render(){ 
  return(
              <div>
                  <p>제 이름은 {this.props.name}입니다. </p>
                  <p>저는 {this.props.age}살 입니다.</p>
                  <p>숫자 : {this.state.number}</p>
                  <button onClick={() => {
                  	this.setState({
                    	number : this.state.number+1
                        })
                  }
              }더하기</button>
              </div>  
          )

 

 

 

 

 

[참고] 리액트를 다루는 기술-김민준 (길벗)