Voyage_dev
항해하는 개발자
Voyage_dev
전체 방문자
오늘
어제
  • All (158)
    • Front-End (102)
      • HTML & CSS (7)
      • JavaScript (13)
      • Web & 표준 & ETC (15)
      • React (17)
      • Next (13)
      • TypeScript (6)
      • Zustand (1)
      • AWS (4)
      • Redux (1)
      • MobX (9)
      • GraphQL (1)
      • Flutter (15)
    • 알고리즘 (12)
      • Java (11)
      • JavaScript (1)
    • Git (1)
    • Project (2)
      • 개인 (1)
      • 팀 (1)
    • Books (30)
      • 누구나 자료구조와 알고리즘 (20)
      • Do It 타입스크립트 프로그래밍 (9)
    • 자료구조 (6)
    • 취업 (1)
    • 항해플러스 (1)
      • 1주 (1)

블로그 메뉴

  • 👨🏻‍💻 Github
  • 💻 Rss 블로그
  • 🏊‍♂️ Resume
  • 🗂️ Portfolio

인기 글

최근 댓글

hELLO · Designed By 정상우.
Voyage_dev

항해하는 개발자

Front-End/React

[React] Props & State

2022. 4. 13. 16:38

State

State란 말 그대로 컴포넌트의 상태 값이다

State와 Props는 둘 다 object 이거, 화면에 보여줄 정보 즉, 상태를 가지고 있다는 점에서 서로 비슷한 역할을 한다. props는 컴포넌트를 사용하는 부모쪽에서 전달해야만 사용할 수 있고 (함수의 parameter 처럼) 읽기전용이다. state는 컴포넌트 내에서 정의하고 사용하며 업데이트 할 수 있다

 

state는 변수 대신 쓸 수 있는 데이터 저장공간이다. useState()를 이용해 사용해야한다 useState[a,b]에서

a는 state 데이터, b는 state 데이터 변경 함수이다

state에 데이터를 저장해놓는 이유

  • 웹이 앱처럼 동작하게 만들고 싶어서
  • state는 변경되면 HTML이 자동으로 재렌더링 된다
  • HTML이 새로고침 없이도 스무스하게 변경된다

자주 바뀌는 중요한 데이터는 변수 말고 state로 저장해서 사용!

아래의 예시는 버튼을 눌렀을 때, state를 변화시켜서 보여줘야할 텍스트를 바꾸는 코드이다. 여러 개의 state를 추가할 수 있으며, state 이름은 원하는대로 지을 수 있다

import { useState } from "react";
import ReactDOM from "react-dom";

function Button(props) {
  const [isClicked, setIsClicked] = useState(false);

  return (
    <button className="btn" onClick={() => setIsClicked(!isClicked)}>
      {isClicked ? "좋아요" : "싫어요"}
    </button>
  );
}

ReactDOM.render(<Button />, document.getElementById("root"));

**const [isClicked, setIsClicked] = useState(false)**

  • useState를 통해서 isCliked라는 state와, setIsClicked라는 state를 업데이트 할 수 있는 함수를 선언했다
  • useState의 인자로 false를 전달하여서 isClicked의 초기값이 false가 되도록 설정했다

설명:

  • isClicked라는 state를 선언하는 코드이다
  • 함수형 컴포넌트에서 state를 만들때는 useState라는 함수를 이용
  • useState의 인자로 전달된 값은 선언된 staet의 초기값으로 할당된다
  • useState의 실행 결과는 좌측에 [state, state를 갱신할 수 있는 함수] 배열 형태로 리턴된다
  • useState의 리턴값을 배열 구조 분해 할당문법을 이용해 각각 isClicked와 setIsClicked라는 이름으로 선언했다

**onClick={() => setIsClicked(!isClicked)}**

  • onClick이 달려있는 <button />를 클릭할 때마다, isClicked 상태가 true냐 false로 업데이트 된다

설명:

  • click하면 isClicked이라는 state를 수정한다. setIsClicked 함수로 state를 업데이트할 수 있다
  • setIsClicked 함수의 인자로 전달된 값으로 isClicked 값이 업데이트 된다
  • !isClicked으로 인자로 전달해 업데이트 한다는 말은, 현재 isClicked의 반대로 (true면 false로, false면 true로) 저장한다는 말이다
  • 위 코드로 인해 button에 click event가 발생할 때 마다 isClicked state가 업데이트 된다

Props와 State

React 컴포넌트에서는 input을 props라고 말한다는 걸 뜻한다. 이번에는 props도 넣어보는 예시를 들겠다. <Button />에 type을 추가했고, Button 컴포넌트에서 props로 받을 수 있다

import { useState } from "react";
import ReactDOM from "react-dom";
import "./index.css";

function Button(props) {
  const [isClicked, setIsClicked] = useState(false);

  return (
    <button
      className={`btn ${props.type === "like" ? "like-btn" : ""}`}
      onClick={() => setIsClicked(!isClicked)}>
      {isClicked ? "좋아요" : "싫어요"}
    </button>
  );
}

ReactDOM.render(<Button type="like" />, document.getElementById("root"));
  • props.type이 ‘like’ 이면 like-btn이라는 class 속성이 추가된다

'Front-End > React' 카테고리의 다른 글

[React] React-Query  (0) 2022.06.06
[React] useEffect와 Side Effect  (0) 2022.04.19
[React] map 함수 적용시 key props를 부여하는 이유  (0) 2022.04.17
[React] Hooks  (0) 2022.04.16
[React] React?  (0) 2022.04.13
    'Front-End/React' 카테고리의 다른 글
    • [React] useEffect와 Side Effect
    • [React] map 함수 적용시 key props를 부여하는 이유
    • [React] Hooks
    • [React] React?
    Voyage_dev
    Voyage_dev

    티스토리툴바