Props
props
의 특징How to use props
props를 사용하는 방법
<Parent>
, <Child>
컴포넌트 선언
// 위 단계에 맞추어 props를 사용하기 위해 우선 <Parent> 와 <Child> 라는 컴포넌트를 선언
// <Parent> 컴포넌트 안에 <Child> 컴포넌트를 작성
function Parent() {
return (
<div className="parent">
<h1>I'm the parent</h1>
<Child />
</div>
);
};
function Child() {
return (
<div className="child"></div>
);
};
HTML 속성과 값 다루는 법
// 컴포넌트를 만들었으니 이제 전달하고자 하는 속성을 정의해 봅시다.
// HTML에서 속성과 값을 할당하는 방법과 같다.
// 아래의 코드에서는 <a> 요소의 href 속성에 "www.codestates.com"라는 값을 주었다.
<a href="www.codestates.com">Click me to visit Code States</a>
React에서 JSX 속성 및 값을 할당하는 방법 1
// React에서 속성 및 값을 할당하는 방법도 이와 유사
// 다만, 전달하고자 하는 값을 중괄호 {}를 이용하여 감싸주면 됩니다.
<Child attribute={value} />
React에서 JSX 속성 및 값을 할당하는 방법 2
// 위 방법을 이용하여 text라는 속성을 선언하고,
// 이 속성에 "I'm the eldest child"라는 문자열 값을 할당하여 <Child> 컴포넌트에 전달해 봅시다.
<Child text={"I'm the eldest child"} />
<Child>
컴포넌트에서 props 매개변수 사용 예시
// <Parent> 컴포넌트에서 전달한 "I'm the eldest child"라는 문자열을 <Child> 컴포넌트에서 받아 봅시다.
// 함수에 인자를 전달하듯이 React 컴포넌트에 props를 전달하면 되고, 이 props가 필요한 모든 데이터를 가지고 오게 됩니다.
function Child(props) {
return (
<div className="child"></div>
);
};
<Child>
컴포넌트에서 props.text렌더링 예시
// props를 전달받았으니, 마지막으로 이 props를 렌더링해 봅시다.
// props를 렌더링하려면 JSX 안에 직접 불러서 사용하면 됩니다.
// 다만, props는 객체라고 하였고, 이 객체의 { key : value }는 <Parent> 컴포넌트에서 정의한 { attribute : value }의 형태를 띠게 됩니다.
// 따라서 JavaScript에서 객체의 value에 접근할 때 dot notation을 사용하는 것과 동일하게 props의 value 또한 dot notation으로 접근할 수 있습니다.
// 아래와 같이 props.text를 JSX에 중괄호와 함께 작성하면 잘 작동합니다.
function Child(props) {
return (
<div className="child">
<p>{props.text}</p>
</div>
);
};
props.children
props를 전달하는 또 다른 방법으로 여는 태그와 닫는 태그의 사이에 value를 넣어 전달하는 방법이 있습니다.
이 경우 props.children을 이용하면 해당 value에 접근하여 사용할 수 있습니다.
// props.children 예시
function Parent() {
return (
<div className="parent">
<h1>I'm the parent</h1>
<Child>I'm the eldest child</Child>
</div>
);
};
function Child(props) {
return (
<div className="child">
<p>{props.children}</p>
</div>
);
};
State
state는 Toggle Switch나 Counter처럼 컴포넌트 내부에서 변할 수 있는 값이라고 하였다.
실제 애플리케이션에서는 무엇이 "상태"라고 할 수 있을까?
쇼핑몰 장바구니를 예로 들어보겠다.
사용자는 구매할 물건과 당장은 구매하지 않을 물건을 체크박스에 체크하여 구분 짓는다.
이를 장바구니 내에서의 상태로 구분해 본다면 check 된 상태와 check 되지 않은 상태이다.
장바구니 내에서의 상태
체크 여부에 따라 구매할 물건의 개수나 구매 금액이 변경되고, 이에 따라 사용자의 화면 또한 달라진다.
이처럼 컴포넌트 내에서 변할 수 있는 값, 즉 상태는 React state
로 다뤄야 합니다.
State hook, useState
useState
사용법React에서는 state를 다루는 방법 중 하나로 useState
라는 특별한 함수를 제공합니다.
// useState 불러오기
import { useState } from "react";
이후 useState
를 컴포넌트 안에서 호출해 줍니다.
useState
를 호출한다는 것은 "state"라는 변수를 선언하는 것과 같으며, 이 변수의 이름은 아무 이름으로 지어도 된다.
일반적인 변수는 함수가 끝날 때 사라지지만, state 변수는 React에 의해 함수가 끝나도 사라지지 않는다.
useState
를 호출하면 배열을 반환하는데, 배열의 0번째 요소는 현재 state 변수이고, 1번째 요소는 이 변수를 갱신할 수 있는 함수입니다.
useState
의 인자로 넘겨주는 값은 state의 초깃값입니다.
// useState 수도 코드
const [state 저장 변수, state 갱신 함수] = useState(상태 초기 값);
useState 문법 예시
function CheckboxExample() {
// 새로운 state 변수를 선언하고, 여기서는 이것을 isChecked라 부르겠다.
const [isChecked, setIsChecked] = useState(false);
}
isChecked
, setIsChecked
는 useState
의 리턴값을 구조 분해 할당한 변수useState 구조 분해 할당 예시
function CheckboxExample() {
// 1번 코드를 풀어쓰면,
const [isChecked, setIsChecked] = useState(false); // 1번
//...
// 2번 코드와 같다.
const stateHookArray = useState(false); // 2번
const isChecked = stateHookArray[0];
const setIsChecked = stateHookArray[1];
}
수도 코드를 실제 코드로 작성해 봅시다.
// useState 문법 예시
function CheckboxExample() {
const [isChecked, setIsChecked] = useState(false);
// const [state 저장 변수, state 갱신 함수] = useState(state 초깃값);
isChecked
: state를 저장하는 변수
setIsChecked
: state isChecked
를 변경하는 함수
useState
: state hook
false
: state 초깃값
isChecked
가 boolean 값을 가지기 때문에 true
or false
여부에 따라 다른 결과가 보이도록 삼항연산자를 사용합니다.// JSX에서 삼항연산자 사용 예시
<span>{isChecked ? "Checked!!" : "Unchecked"}</span>
state
갱신하기function CheckboxExample() {
const [isChecked, setIsChecked] = useState(false);
const handleChecked = (event) => {
setIsChecked(event.target.checked);
};
return (
<div className="App">
<input type="checkbox" checked={isChecked} onChange={handleChecked} />
<span>{isChecked ? "Checked!!" : "Unchecked"}</span>
</div>
);
}
setIsChecked
를 호출합니다.input[type=checkbox]
JSX 엘리먼트의 값 변경에 따라서 isChecked
가 변경되어야 합니다.checked
로 값이 변경되었다면, React의 isChecked
도 변경되어야겠한다.onChange
이벤트가 이벤트 핸들러 함수인 handleChecked
를 호출하고, 이 함수가 setIsChecked
를 호출하게 된다.setIsChecked
가 호출되면 호출된 결과에 따라 isChecked
변수가 갱신되며, React는 새로운 isChecked
변수를 CheckboxExample
컴포넌트에 넘겨 해당 컴포넌트를 다시 렌더링 합니다tate.push(1);
, state[1] = 2;
, state = 'wrong state';