React

State

Mia_ 2022. 11. 28. 11:50

state

: 컴포넌트 내에서 변할 수 있는 값

 

 

State hook, useState

 

useState 사용법

 

1. useState 함수 불러오기

- React로 부터 useState를 불러와야 함

- improt 키워드로 useState를 불러옴

import { useState } from "react";

 

2. useState 컴포넌트 안에서 호출 하기

- useState를 호출한다는 것은 'state'라는 변수를 선언한는 것과 같다 

- 이 변수의 이름은 아무 이름으로 지어도 됨 

- 일반적인 변수는 함수가 끝날 때 사라지지만, state 변수는 React에 의해 함수가 끝나도 사라지지 않음 

## useState 구조 분해 할당 예시

function CheckboxExampe() {
  //새로운 state 변수를 선언하고, 여기서는 이것을 isChecked라고 부르기로 함 
  // 1번 코드를 풀어 스면
  const [isChecked, setIsChecked] = useState(false); // 1번
  
  // ...
  
  // 2번 코드와 같습니다
  const stateHookArray = useState(false); // 2번
  const isChecked = stateHookArray[0];
  const setIsChecked = stateHookArray[1];
}

- useState를 호출하면 배열을 반환하는데

- 배열의 0번째 요소는 현재 state 변수이고, 1번째 요소는 이 변수를 갱신할 수 있는 함수

- useState 의 인자로 넘겨주는 값은 state의 초깃값

const [stste 저장 변수, state 갱신 함수] = useState(상태 초기 값);

function CheckboxExample() {
  const [isChecked, setIsCheked] = useState(false);
  
## 예시 대입 시 
 - isCheked : state를 저장하는 변수
 - setIsCheked : state isChecked를 변경하는 함수
 - useState : state hook
 - flse : state 초기값

 

 

3. state 변수에 저장된 값 사용 → JSX 엘리먼트 안에 직접 불러서 사용

- 예시에서는 isChecked가 boolean 값을 가지기 때문에 true or false 여부에 따라 다른 결과가 보이도록 삼항 연산자 사용 

## JSX에서 삼항연산자 사용 예시
<span>{isChecked ? "Checked!" : "Unchecked"}</span>

state 갱신하기

 

1. state를 갱신하려면 state 변수를 갱신할 수 있는 함수를 호출

- 위의 예시에선는 setIsChecked를 호출

- 이번 예시의 경우, input[type=checkbox] JSX 엘리먼트의 값의 변경에 따라서 isChecked가 변경되어야 함

 

2. 사용자가 체크박스 값을 변경하면 onChange 이벤트가 이벤트 핸들러 함수인 handleChecked를 호출하고 → 이 함수가 setIsChecked 를 호출

 

3. setIsChecked 가 호출되면 호출된 결과에 따라 isChecked 변수가 갱신되며, React는 새로운 isChecked 변수를 CheckboxExmple 컴포넌트에 넘겨 해당 컴포넌트를 다시 렌더링 함

## 완성된 체크박스 컴포넌트 예시
function CheckboxExmple() {
  const [isCheked, setIsChecked] = useState(false);
  
  const handleChecked = (event) => {
    setIsChecked(event.target.checked);
  };
  
  retrun (
    <div className="App">
      <input type="checkbox" checked={isChecked} onChange={handleChecked} />
      <span>{isChecked ? "Checked!" : "Unchecked"}</span>
    </div>
  );
}

주의점 

 

- React 컴포넌트는 state가 변경되면 새롭게 호출되고, 리렌더링 됨

- React state는 상태 변경 함수 호출로 변경해야 함, 강제로 변경을 시도 하면 안됨