React 에서 데이터를 다루는 두 가지 방법인 State 와 Props 에 대해 학습합니다.
컴포넌트의 속성(Property)
외부로부터 전달받은 값(속성)
입니다.객체 형태
입니다.함부로 변경될 수 없는 읽기 전용(read-only) 객체
입니다.// 일반적인 props 사용 예시
function Parent() {
return (
<div className="parent">
<h1>I'm the parent</h1>
<Child text={"I'm the eldest child"} how={"Is it alright?"} />
</div>
);
};
function Child(props) {
return (
<div className="child">
<p>{props.text}</p>
<p>{props.how}</p>
</div>
);
};
props.children
을 활용하여 해당 value 에 접근 (자식)// props.children 사용 예시
function Parent() {
return (
<div className="parent">
<h1>I'm the parent</h1>
<Child>I'm the eldest child</Child>
<Child>Is it alright?</Child>
</div>
);
};
function Child(props) {
return (
<div className="child">
<p>{props.children}</p>
</div>
);
}
컴포넌트 내에서 변할 수 있는 값 ("상태")
대표적으로 다크모드 토글, 쇼핑몰 장바구니 체크박스 등에 사용됩니다.
State Hook 즉 State 를 다루는 방법 중 하나로 useState()
라는 특별한 함수
useState()
를 불러옵니다.import { useState } from "react";
useState()
를 컴포넌트 안에서 호출해 줍니다.useState()
를 호출한다는 것은 "state" 라는 변수를 선언하는 것과 같습니다.
일반적인 변수는 함수가 끝날 때 사라지지만, State 변수는 React 에 의해 함수가 끝나도 사라지지 않습니다.
useState()
호출 문법
const [state 저장 변수, state 갱신 함수] = useState(상태 초기 값);
예시
// useState 문법 예시 (기본: 구조 분해 할당 O)
function CheckboxExample() {
const [isChecked, setIsChecked] = useState(false);
}
// useState 문법 예시 (구조 분해 할당 X)
function CheckboxExample() {
const stateHookArray = useState(false);
const isChecked = stateHookArray[0];
const setIsChecked = stateHookArray[1];
}
setIsChecked
를 호출합니다.<input type="checkbox" ...(생략)>
의 엘리먼트 값이 변경되면 onChange
이벤트가 발생하고 이벤트 핸들러 함수를 작동시키는 패턴을 사용합니다.onChange
이벤트가 이벤트 함수인 handleChecked
를 호출하고 이 함수가 setIsChecked
함수를 호출합니다.setIsChecked
가 호출되면 호출된 결과에 따라 isChecked
변수가 갱신됩니다.isChecked
변수를 React 가 CheckboxExample
컴포넌트에 넘겨 해당 컴포넌트를 다시 렌더링 합니다.// 완성된 체크박스 컴포넌트 예시
function CheckboxExample() {
const [isChecked, setIsChecked] = useState(false);
const handleChecked = (event) => {
setIsCecked(event.target.checked);
}
return (
<div className="App">
<input type="checkbox" checked={isChecked} onChange={handleChecked} />
<span>{isChecked ? "Checked!!" : "Unchecked"}</span>
</div>
);
}
state.push(1);
, state[1] = 2;
, state = 'wrong state';
❌state
를 따로 관리하고 싶어합니다.state
를 통제할 수 있는 컴포넌트를 Controlled Component
라고 합니다.코드스테이츠 프론트엔드 부트캠프