react

함수 컴포넌트와 useState

2022. 12. 28. 07:49
목차
  1. 🔍함수 컴포넌트에서 useState 사용하기
  2. 🔍useState 사용해보기
  3.  
  4.  
  5. 🔍한 컴포넌트에서 useState를 여러번 사용하기
  6. 🔍useState 사용시 주의할 점

🔍함수 컴포넌트에서 useState 사용하기

리액트 16.8이전버전에서는 함수 컴포넌트에서 state를 사용할 수 없었지만

useState함수를 사용하여 함수 컴포넌트에서도 state를 사용할 수 있게 되었답니다.

또한 useState를 사용하는 과정에서 Hooks라는 것을 사용하게됩니다.


🔍useState 사용해보기

 

import React from "react";
import { useState } from "react";

const Say = () => {
  const [message, setMessage] = useState("");
  const onClickEnter = () => setMessage("안녕하세요");
  const onClickLeave = () => setMessage("안녕히가세요");
  return (
    <div>
      <button onClick={onClickEnter}>입장</button>
      <button onClick={onClickLeave}>퇴장</button>
      <h1>{message}</h1>
    </div>
  );
};

export default Say;

 

먼저 import 구문을 통해 useState를 import해옵니다.

 

🙄useState?

인자로 받는것 : 상태의 초기값
**클래스형 컴포넌트의 state 초깃값은 객체 형태여야 하지만
useState에서는 값의 형태가 자유롭습니다.

호출하면?
배열이 반환됩니다.
배열의 첫번째 원소는 현재상태
배열의 두번째 원소는 상태를 바꾸어주는 함수입니다.

두번째 원소의 함수를 Setter함수라고 부릅니다.

배열 비구조화할당을 통해 원소의 이름을 자유롭게 지정가능합니다.
위예제에서는 message와 setMessage로 원소이름을 지정했습니다.

 


 

🔍한 컴포넌트에서 useState를 여러번 사용하기

 

useState는 한 컴포넌트에서 여러번 사용해도 상관이 없어요

위 예제에서 useState를 좀 더 추가해보겠습니다.

 

import React from "react";
import { useState } from "react";

const Say = () => {
  const [message, setMessage] = useState("");
  const onClickEnter = () => setMessage("안녕하세요");
  const onClickLeave = () => setMessage("안녕히가세요");

  const [color, setColor] = useState("black");
  return (
    <div>
      <button onClick={onClickEnter}>입장</button>
      <button onClick={onClickLeave}>퇴장</button>
      <h1 style={{ color }}>{message}</h1>
      <button style={{ color: "red" }} onClick={() => setColor("red")}>
        빨강색
      </button>
      <button style={{ color: "green" }} onClick={() => setColor("green")}>
        초록색
      </button>
      <button style={{ color: "blue" }} onClick={() => setColor("blue")}>
        파랑색
      </button>
    </div>
  );
};

export default Say;

 

색상을 담당할 useState를 만들어줬습니다.

버튼에 onclick이벤트가 발생하면 setcolor의 상태를 바꿔주는 코드입니다.

 


🔍useState 사용시 주의할 점

 

state 값을 바꾸어야 할 때는 setState 혹은 useState를 통해 전달받은 세터함수를 사용해야합니다.

 

잘못된 코드 예시

const [object, setobject] = useState({a:1,b:1})
object.b = 2;

이렇게 세터함수를 사용하지 않고 직접 접근해서 값을 수정해서는 안된다는 뜻

 

근데 그럼 배열이나 객체를 업데이트해야할때는 어케함?

1. 배열 혹은 객체의 사본을 만든다.
2. 사본에 값을 업데이트해준다.
3. 그 사본의 상태를 세터함수를 통해 업데이트한다.

이 과정을 통해 업데이트해주면 된다고 합니다.

 

배열 업데이트는 filter, map 같이 원본 배열을 안건드리는 함수들을 사용하면 쉽게 할 수 있을 것 같은데

객체의 사본을 만들어서 쓰는건 많이 안해본 작업이라 감이 잘 안오네용

const object = { a: 1, b: 2, c: 3 };
const nextObject = { ...object, b: 4 }; //{ a: 1, b: 4, c: 3 }

const array = [
  { id: 1, value: true },
  { id: 2, value: true },
  { id: 3, value: false },
];

let nextArray = array.concat({ id: 4 });
let a = nextArray.filter((item) => item.id !== 2);
let b = nextArray.map((item) =>
  item.id === 1 ? { ...item, value: false } : item
);

 

객체를 복사할때 스프레드연산자를 통해서 사본을 만들면 되는군요

 

반응형
저작자표시 비영리 (새창열림)

'react' 카테고리의 다른 글

함수형과 클래스형 컴포넌트의 차이를 자세히 설명해주세요  (0) 2023.02.05
리액트 엘리먼트 렌더링이란?  (0) 2023.02.03
클래스형 컴포넌트와 state  (0) 2022.12.28
컴포넌트와 Props  (0) 2022.12.27
JSX 문법 정리  (0) 2022.12.27
  1. 🔍함수 컴포넌트에서 useState 사용하기
  2. 🔍useState 사용해보기
  3.  
  4.  
  5. 🔍한 컴포넌트에서 useState를 여러번 사용하기
  6. 🔍useState 사용시 주의할 점
'react' 카테고리의 다른 글
  • 함수형과 클래스형 컴포넌트의 차이를 자세히 설명해주세요
  • 리액트 엘리먼트 렌더링이란?
  • 클래스형 컴포넌트와 state
  • 컴포넌트와 Props
냠냠맨
냠냠맨
프론트엔드 개발 전반을 다루는 기술 블로그입니다.
냠냠맨
React와 TypeScript를 좋아하는 개발자
냠냠맨
전체
오늘
어제
  • all category (434)
    • CMC (0)
    • best (11)
    • 년간회고 (1)
    • cheetsheet (15)
    • 프로젝트 회고 (3)
    • 서평 (3)
    • SEO Study (1)
    • 프로젝트 진행기 (10)
    • testcode (9)
    • yarnberry (7)
    • css (21)
    • typescript (15)
    • redux (7)
    • react (43)
    • Next.js (9)
    • Nestjs (3)
    • javascript (44)
    • programmers (67)
    • leetcode (41)
    • frontend (41)
    • backjoon (1)
    • Next.js Beta Docs 번역 (12)
    • TIL (15)
      • html (3)
    • Network (12)
      • 간단 정리 시리즈 (2)
      • 질답 준비 (0)
    • 자료구조와 알고리즘 (2)
    • CS (4)
      • OS (1)
    • 취업준비 (2)
    • zoom websocket (2)
    • talk (6)
    • 면접대비 (1)
    • 코드스테이츠 프론트 (5)
    • 간헐적 회고 (18)

블로그 메뉴

  • leetcode
  • programmers
  • javascript
  • html
  • css

공지사항

인기 글

태그

  • frontend
  • LeetCode
  • JavaScript
  • 말풍선
  • 테오의스프린트
  • 개발자
  • border말풍선
  • 테오의스프린트17기
  • 개발
  • 코드스테이츠 #프론트엔드
  • teosprint
  • 주니어개발자
  • CSS
  • 프론트엔드

최근 댓글

최근 글

hELLO · Designed By 정상우.
냠냠맨
함수 컴포넌트와 useState
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.