TIL-20, React, State & Props
React에서 아주 중요한 (물론 다른것들도 아주 중요하지만)
Props와 State에 대해서 학습을 해보자!
Props
Props
란?
-> 성별이나 이름처럼 외부로부터 전달받은 변하지 않는 값.
컴포넌트가 가진 속성이며, 상위 컴포넌트로부터 전달받은 값이다.
전달인자처럼 전달될 수 있고, 화면에 출력하고자 하는 데이터를
담은 초기값으로 사용할 수 있다.
객체 형태이고, 읽기 전용이다. (변경될 수 없기 떄문에)
속성과 값을 할당하는 방법
-> <컴포넌트 속성={값} /> 의 형식으로 작성하면 된다.
만약 Child라는 컴포넌트에 text라는 속성을 선언하고 값을 넣으려면
<Child text={"hello world"} />
위와 같이 작성해주면 된다.
자세한 예시를 아래 코드에서 살펴보자.
function Parent() {
return (
<div className="parent">
<h1>i'm the parent</h1>
<Child text={"hello world"} />
</div>
);
};
function Child() {
return (
<div className="child"></div>
);
};
위와 같이, Parent의 <Child />
를
<Child text={"hello world"} />
로 해주고,
function Child(props) {
return (
<div className="child">
<p>{props.text}</p>
</div>
);
};
Child 컴포넌트를 위와같이 해주면 렌더링이 된다.
(props는 위에서 설명했듯이 객체 형태이기 떄문에
props.text의 Dot notation형태로 적어주는것.
Parent 컴포넌트에서 text={"hello world"}로 작성해준 것에서
text는 키, "hello world"는 값이 되는것이다.)
위 방법 외에
props.children
방식도 존재한다.
function Parent() {
return (
<div className="parent">
<h1>i'm the parent</h1>
<Child>hello world</Child>
</div>
);
};
function Child(props) {
return (
<div className="child">
<p>{props.children}</p>
</div>
);
};
위와 같은 방법으로 존재해도 같은 결과물을 얻어낼 수 있다.
(하지만 별로 안쓰이는듯..)
State
State
란?
-> Toggle Switch나 Counter처럼 컴포넌트 내부에서
변할 수 있는 값.
(체크박스에 체크가 되고 안되고, text 입력칸에
text의 내용이 변하는 등.)
State가 변경되면 리렌더링(실시간 업데이트)된다.
useState
최우선적으로
import { useState } from "react";
react에서 useState를 import한다.
기본적인 형태는 아래와 같다.
function CheckboxExample() {
const [isChecked, setIsChecked] = useState(false);
const [state 저장 변수, state 갱신 함수] = useState(초기 값)
이다.
배열의 0번째 요소는 현재 state(초기 값),
1 번째 요소는 이 변수를 갱신하는 함수이다.
useState의 인자로 넘겨주는 것은 state의 초기값이다.
위의 코드로 예를 들어 설명하자면,
현재 isChecked의 값은 초기값인 false (useState)이고,
그 초기값은 setIsChecked 함수로 인해서 변하게된다.
아래 코드 예시로 살펴보자.
function NameForm() {
// 1. useState를 설정해준다. 초기값은 빈문자열("")이고,
// name 값이 setName 함수로 인해 변경될 것이다.
const [name, setName] = useState("");
// 3. 이벤트 핸들러 handleChgange가 작동되면
// 이벤트(onChange)의 target (input 태그)의 vaule값 (name)이
// setName 함수로 인해 변경된다.
const handleChange = (e) => {
setName(e.target.value);
}
return (
<div>
// 2. text 타입의 값이 변하면 (onChange)
// 이벤트 핸들러인 handleChange 함수가 작동된다.
<input type="text" value={name} onChange={handleChange}>
</input>
</div>
)
};
리액트의 핵심!!
리액트 데이터의 흐름은 Top Down (하향식) 이다!
부모 컴포넌트에서 자식 컴포넌트로 데이터가 흐른다!
Author And Source
이 문제에 관하여(TIL-20, React, State & Props), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@skagns211/TIL-20-React-State-Props저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)