카테고리 없음

[React] State

321 2021. 5. 15. 15:27

State란?

import React, { useState } from 'react';
import './App.css';

function App() {

  let [a, aChange] = useState('스테이트 예제1');
  let [b, bChange] = useState(['스테이트 arr 1 ','스테이트 arr 2']);



  return (
    <div className="App">
      <div>
        <h1>{ a }</h1>
        <h2>{ b }</h2>
        <h3>{ b[0] }</h3>
      </div>
    </div>
  );
}

export default App;
  • 먼저 'react'에서 React와 { useState }를 import해줘야한다.
  • useState를 사용해서 선언할때는 보통 destructing을 적용한 변수를 생각하면된다
    • var [a, b] = [1, 2]; 일때 
    • a==1, b==2
  • let [a , aChange] = useState('스테이트 예제');
    • 기본 선언은 이렇다. 여기서 a='스테이트 예제'; 와 같다
  • let [b, bChange] = useState(['스테이트 arr 1 ','스테이트 arr 2']);
    • 변수 b에 배열을 넣을 수도 있고 배열값을 자유롭게 표시할 수도 있다.

위 코드와 같이 입력하면 아래와 같은 결과가 나온다.

 

Chage함수

import React, { useState } from 'react';
import './App.css';

function App() {

  let [a, aChange] = useState(['state1', 'state2', 'state3']);
  let [num, numChange] = useState(0);


  return (
    <div className="App">
      <div>
        <h1>{ a[0] } <span onClick={ () => { numChange(num+1) } }>❤</span> { num } </h1>
        <h1>{ a[1] }</h1>
        <h1>{ a[2] }</h1>        
      </div>
    </div>
  );
}

export default App;

 

  • 하트를 누르면 num이 1씩 증가하도록 하는 함수
  • addEventListener같은 기능. onClick={ }이 안에 생성한 함수명을 적어주거나 새로운 함수를 생성해서 입력하면된다.
  • state의 두번째 변수 기능은 num을 바꾸는 것
    • numChange( ) 괄호 안에 적어줄 내용은 num의 내용이다.
    • numChange함수 자체가 function numChange(a){ num=a; } 이런 느낌
    • 이러한 변경기능과 state자체의 재렌더링 기능이 합쳐져서 하트 누르면 바로 +1된 num이 표시된다.

 

배열형태의 State를 수정하려면

1. 복사본생성 - 이때, deep copy로 해야 기존 배열과 값 공유가 되지 않는다

2. 복사본변경 

3. change함수(복사본)

import React, { useState } from 'react';
import './App.css';

function App() {

  let [a, aChange] = useState(['state1', 'state2', 'state3']);
  let [num, numChange] = useState(0);

  function changeA0(){
    var tmp = [...a];
    tmp[0] = '변 경 한 것';
    aChange(tmp);
  }

  return (
    <div className="App">
      <div>
        <h1 onClick={ changeA0 }>{ a[0] }</h1>
        <h1>{ a[1] }</h1>
        <h1>{ a[2] }</h1>        
      </div>
    </div>
  );
}

export default App;

 

결과 - > state1을 클릭하면 변경된다.