일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 백준
- 모각코
- 백준 18310번
- java_programming
- javascript
- 백준 1331번
- 그래프
- 백준 15787번
- 다이나믹프로그래밍
- Python
- 그리디
- 백준 1987
- AWS
- SWEA 15612번
- 백준 3085번
- ubuntu
- 알고리즘
- 자바
- HUFS 모각코 캠프
- 머신러닝과 딥러닝
- 명품자바
- 깃헙
- SQL
- react
- MySQL
- 백준 2512번
- 백준 16918번
- 백준 17451번
- 다이나믹 프로그래밍
- 백준 1253번
- Today
- Total
차곡차곡
[React] #4 state 본문
state는 컴포넌트 내부에서 바뀔 수 있는 값으로, state가 수정 됐을 때 페이지를 다시 그리지 않아도 UI 업데이트가 가능하기 때문에 SPA의 핵심 요소라고 할 수 있다. 리액트에는 클래스형 컴포넌트가 지니고 있는 state와 함수형 컴포넌트에서 useState라는 함수를 통해 사용되는 state 두 가지 종류가 있다. useState 함수는 함수형 컴포넌트에서도 상태 관리를 할 수 있도록 리액트 16.8에서 도입된 Hooks 기능 중 하나다. 함수의 인자에는 상태의 초깃값을 넣어준다. 값의 형태는 숫자, 문자열, 객체, 배열 등 자유롭다. 함수를 호출하면 배열이 반환되는데, 이때 첫 번째 원소는 현재 상태, 두 번째 원소는 상태를 바꿔주는 세터(Setter) 함수이다. state 값을 바꿔야 할 때는 setState 혹은 useState를 통해 전달받은 세터 함수를 사용해야 한다.
☝🏻 배열 비구조화 할당
const array = [1, 2];
const [one, two] = array;
import React, { useState } from "react";
const Hello = () => {
const [message, setMessage] = useState("");
const [color, setColor] = useState("black");
const onClickEnter = () => {
setMessage("안녕하세요!");
};
const onClickLeave = () => {
setMessage("안녕히가세요!");
};
return (
<div>
<button onClick={onClickEnter}>입장</button>
<button onClick={onClickLeave}>퇴장</button>
<h1 style={{ color }}>{message}</h1>
<button style={{ color: "red" }} onClick={() => setColor("red")}>
red
</button>
<button style={{ color: "green" }} onClick={() => setColor("green")}>
green
</button>
<button style={{ color: "blue" }} onClick={() => setColor("blue")}>
blue
</button>
</div>
);
};
export default Hello;
만약 배열이나 객체를 업데이트해야 할 때는 배열, 객체 사본을 만들고 그 사본에 값을 업데이트 한 후, 그 사본의 상태를 setState 혹은 세터 함수를 통해 업데이트한다. 객체에 대한 사본을 만들 때는 spread 연산자를 사용하여 처리하고, 배열에 대한 사본을 만들 때는 배열의 내장 함수들을 활용한다.
☝🏻 spread 연산자
spread 연산자는 ... 을 통해 사용할 수 있다. spread 연산자를 사용하면 배열, 문자열, 객체 등 반복 가능한 객체를 개별 요소로 분리할 수 있다. spread 연산자를 통해서 배열을 찍으면 배열이 아닌 개별적인 요소가 나오는 것을 볼 수 있다.
const arr = [1, 2, 3, 4, 5];
console.log(arr); // [ 1, 2, 3, 4, 5 ]
console.log(...arr); // 1, 2, 3, 4, 5
객체 사본 만들기
const object = { a: 1, b: 2, c: 3 };
const nextObject = { ...object, b: 2 }; // 사본을 만들어서 b 값만 덮어 쓰기
배열 사본 만들기
const array = [
{ id: 1, value: true },
{ id: 2, value: true },
{ id: 3, value: false }
];
let nextArray = array.concat({ id: 4 }); // 새 항목 추가
nextArray.filter(item => item.id != = 2); // id가 2인 항목 제거
nextArray.map(item => (item.id === 1 ? { ...item, value: false } : item)); // id가 1인 항목의 value를 false로 설정
props와 state 둘 다 컴포넌트에서 사용하거나 렌더링할 데이터를 담고 있어 비슷해 보일 수 있지만, props는 부모 컴포넌트가 설정하는 값이고 state는 컴포넌트 자체적으로 지닌 값으로 컴포넌트 내부에서 업데이트 할 수 있다.
'Web programming > React' 카테고리의 다른 글
[React] #6 컴포넌트 반복 (2) | 2022.07.06 |
---|---|
[React] #5 이벤트 핸들링 (3) | 2022.07.06 |
[React/실습] 투두리스트 제작 #1 (7) | 2022.07.05 |
[React] #3 컴포넌트 (0) | 2022.07.05 |
[React] #2 Props (5) | 2022.07.04 |