Notice
Recent Posts
Recent Comments
Link
«   2025/11   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
Tags
more
Archives
Today
Total
관리 메뉴

Dev

React: state 본문

Web/Front-end

React: state

flutterbylily 2023. 6. 26. 23:32

2. state

컴포넌트 안에서 사용되는 이벤트에 의해 변경이 일어나는 동적인 값.

값을 변경할 수 있으며 반드시 setState를 사용하여 변경한다. 

 

 

※ state 사용할 때 주의사항

 

❗state에 저장되는 객체는 반드시 초기화(생성자에서 초기화)

❗state 값을 임의로 직접 변경하지 말 것, 반드시 state 값 변경시 setState() 사용.

    직접 변경하면 render 함수가 호출되지 않아 리렌더링 발생 X

 

 

1) 사용법

 

(1) 기본 사용: useState

 

① import useState

import { useState } from 'react';

 

② declare useState()

 

  • useState 기본형태
const [state, setState] = useState(initialState);

- state: 현재 상태

- setState: 상태를 변경하는 setState 함수 리턴

- initialState: 상태 초기값. 생략 가능

 

 

 

(2) state 값 변경: setState()

setState() 함수를 호출하여 state 값을 변경하면 자동으로 render 함수를 호출

다음과 같은 예시를 통해 useState와 setState 사용:

  • App.js: Increase를 클릭할때마다 1씩 증가
import React, { useState } from 'react';

const App = () => {
    const [num, setNumber] = useState(0);		//초기값 0
    const onIncrease = () => {
    	setNumber(num + 1);
    }
    return(
    	<div>
            <h1>{num}</h1>
            <button onClick={onIncrease}>Increase</button>
        </div>
    );
}

export default App;

 

🌟setState() 함수는 비동기 처리, 즉 작업 순서대로가 아닌 이벤트에 따라 처리.

    어떤 작업에서 시간이 오래 소요되면 해당 작업이 완료될때까지 기다려주지 않고 다음 작업을 실행...

    즉 작업의 실행 순서를 보장하지 않는다.

 

🌟 setState() 함수의 인자로 함수를 전달하면 이전 state 값을 쉽게 가져올 수 있음

 

state를 변경한 후 변경된 state를 사용해야 할 경우(state의 업데이트가 이전의 값에 의존):

 

  • Counter.js: Increase, Decrease
import React, { useState } from 'react';

function Counter() {
    const [number, setNumber] = useState(0);
    
    const onIncrease = () => {
    	setNumber(preNumber => preNumber + 1);
    }
    
    const onDecrease = () => {
    	setNumber(preNumber => preNumber - 1);
    }
    
    return(
    	<div>
            <h2>{number}</h2>
            <button onClick={onIncrease}>Increase</button>
            <button onClick={onDecrease}>Decrease</button>
        </div>
    );
}

export default Counter;

 

 

(3) state 값 변경: forceUpdate()

forceUpdate() 함수를 사용하면 화면을 강제로 새로 고침하여 render() 함수 호출

인스턴스 변수와 화면이 변경되어 출력됨.

 

 

  • ForceUpdate.js
import React, { Component } from 'react';

class ForceUpdate extends Components {
	constructor(props) {
    	super(props);
        this.state = {
        	stateString: 'react',
        }
    }
    StateChange = () => {
    	this.state.stateString = 'React';
        this.forceUpdate();
    }
    
    render() {
    	return(
            <div>
                <button onClick={this.stateChange}>forceUpdate</button>
                {this.state.stateString}				// react에서 React로 변경
            </div>
        );
    }
}

export default ForceUpdate;

※ forceUpdate()를 사용하는 것은 리액트 성능에 제약이 있으므로

    매번 화면을 새로 출력해야 하는 경우가 아니면 가급적 사용하지 않도록 함

 

'Web > Front-end' 카테고리의 다른 글

React: props  (0) 2023.04.11
React: Component  (0) 2023.04.04
React: CRA  (0) 2023.03.25
React 기초:  (0) 2023.03.13