리엑트에서 state컴포넌트 내부에서 바뀔 수 있는 값을 의미한다.

 

리엑트에는 두 가지 종류의 state가 있다.

 

  • 클래스형 컴포넌트가 지니고 있는 state
  • 함수형 컴포넌트에서 useState라는 함수를 통해 사용하는 state

 

 

클래스형 컴포넌트의 state

 

import React, { Component } from 'react';

class Counter extends Component {
    constructor(props){
        super(props);
        // state의 초기 값 설정하기
        this.state = {
            number : 0
        };
    }

    render(){
        const { number} = this.state; 
        // state를 조회 할 때는 this.state로 조회합니다.
        return (
        <div>
            <h1>{number}</h1>
            <button onClick={ () => {
        //this.setState를 사용하여 state에 새로운 값을 넣을 수 있습니다.
                this.setState({number: number+1});
            }}> +1 </button>
        </div>
    );
    }
};

export default Counter;

 

 

컴포넌트에 state를 설정할 때는 다음과 같이 constructor 메서드를 작성하여 설정한다.

 

 constructor(props){
        super(props);
        // state의 초기 값 설정하기
        this.state = {
            number : 0
        };
    }

 

컴포넌트의 생성자 메서드인데 , 클래스 컴포넌트에서 constructor를 작성 할 때는

반드시 super(props)를 호출해 주어야 한다.

 

이 함수가 호출 되면 현재 클래스형 컴포넌트가 상속 받고 있는 

리엑트의 Component 클래스가 지닌 생성자 함수를 호출해 준다.

 

그 다음에 this.state 값에 초깃값을 설정 해준다.

컴포넌트의 state는 객체 형식이어야 한다.

 

 

render(){
        const { number} = this.state; 
        // state를 조회 할 때는 this.state로 조회합니다.
        return (
        <div>
            <h1>{number}</h1>
            <button onClick={ () => {
        //this.setState를 사용하여 state에 새로운 값을 넣을 수 있습니다.
                this.setState({number: number+1});
            }}> +1 </button>
        </div>
    );
    }

 

render 함수에서 현재 state를 조회할 때는 this.state를 조회하면 된다.

 

함수 내부에서는 this.setState 라는 함수를 사용 했는데 이 함수가 state 값을

바꿀수 있게 해준다.

 


state를 constructor에서 꺼내기

앞에서 state의 초깃값을 지정하기 위해 counstructor 메서드를 선언했는데,

또 다른 방식으로 state의 초깃값을 지정해 줄 수 있다.

 

import React, { Component } from 'react';

class Counter extends Component {
   state = {
       number:0
   };

    render(){
        const { number} = this.state; 
        // state를 조회 할 때는 this.state로 조회합니다.
        return (
        <div>
            <h1>{number}</h1>
            <button onClick={ () => {
                //this.setState를 사용하여 state에 새로운 값을 넣을 수 있습니다.
                this.setState({number: number+1});
            }}> +1 </button>
        </div>
    );
    }
};

export default Counter;

이렇게 하면 constructor 메서드를 선언하지 않고도 state 초깃값을

설정 할 수 있다.

 

 

 

객체 대신 함수 인자 전달하기

import React, { Component } from 'react';

class Counter extends Component {
   state = {
       number:0
   };

    render(){
        const { number} = this.state; 
        // state를 조회 할 때는 this.state로 조회합니다.
        return (
        <div>
            <h1>{number}</h1>
            <button onClick={ () => {
                //this.setState를 사용하여 state에 새로운 값을 넣을 수 있습니다.
                this.setState(prevState => {
                    return{

                        number : prevState.number+1
                    };
                });
             }}> +1 </button>
        </div>
    );
            }
};

export default Counter;

버튼 onclick 속성에

 

 onClick={ () => {
                this.setState({number: number+1});
            }}
   
            
 

this.state 객체 대신

 onClick={ () => {
           this.setState(prevState => {
                    return{
                    number : prevState.number+1
                    };
                });
             }} 

함수 인자를 넣어 줄 수 있다.

'react' 카테고리의 다른 글

리엑트의 이벤트(Event)  (0) 2020.12.07
함수형 컴포넌트 useState 사용  (0) 2020.12.07
클래스형 컴포넌트  (0) 2020.12.07
JSX란?  (0) 2020.12.06
react 설치하기  (0) 2020.12.04

+ Recent posts