-
BEB Section 1 - React 22nd of BEB/Codestates 2021. 12. 1. 02:10

이건 크게 props와 state로 나눠서 설명하는 게 가장 좋을 것 같다.
props
- 컴포넌트의 속성을 의미한다. 외부로부터 전달받은 값으로, 해당되는 컴포넌트가 가진 속성에 해당한다.
- props는 부모 컴포넌트로부터 전달받은 값이다. 함수 argument처럼 전달받아 이를 기반으로 화면에 어떻게 표시되는지 React 엘리먼트로 반환한다. 따라서 최초 렌더링 시 화면에 출력하고자 하는 데이터를 담은 초기값으로 사용 가능하다.
- props는 객체 형태이기 때문에 어떤 타입의 값을 넣어 전달 가능하다.
- props는 읽기 전용이기 때문에 성별이나 이름처럼 외부로부터 전달받아 값이 전혀 변하지 않는다.
만약 props가 읽기 전용 객체가 아니라면 props를 전달한 상위 컴포넌트의 값에 영향을 미칠 수 있게 된다. 개발자가 전혀 의도하지 못한 부작용이 생기게 되고, React에 대한 one-way data flow down the component hierarchy에 위배된다.
- props를 사용하는 방법
- 하위 컴포넌트에 전달하고자 하는 값과 속성을 정의
- props를 이용해 정의된 값과 속성 전달
- props 렌더링
function Parent(){ return ( <div className="parent"> <h1>I'm the parent.</h1> <Child /> </div> ); }; function Child() { return ( <div className="child"></div> ); };이런 식으로 컴포넌트 선언했고, Child에 대한 속성값을 주어야한다.
<Child attribute={value} /> // 그래서 할당할 때 <Child text={"I'm a child."} />attribute에는 어떤 속성을 줄 것인지, value에는 해당되는 값을 할당한다. 이렇게 되면 Child 컴포넌트에 text를 부여했다는 걸 알 수 있다. 그렇게 이제 props를 사용하게 되면
function Child(props) { return ( <div className="child"> <p>{props.text}</p> </div> ); };소괄호 안에 props를 넣어주고 그 밑에는 <p> 엘리먼트로 {props.text} 를 렌더링한다. 그렇게 되면 출력할 때 결과값이 아래 코드블럭과 같이 나오게 된다.
I'm the parent. I'm the child.state
아까 props는 값이 변하지 않는다고 했는데, state는 컴포넌트 내 값이 변할 수 있다.
useState
React에서 state를 다룰 수 있는 함수 중 하나이다. 얘 같은 경우는
import { useState } from "react";useState 를 import 하게 되면, 일단 컴포넌트의 값들을 내가 정하고 싶은 대로 지정할 수 있다. 처음에 useState에 대한 변수 지정을 어떻게 할지 몰랐는데 다시 보니까 제대로 된 변수만 지정해주면 사용하는 데엔 쉬웠다.
let [before, after] = useState(["React", "Python", "Javascript"]);사용하기 위해 변수 2개 설정해준다. 이해하기 쉽게 변수를 쉬운 영단어로 표기했다. before를 통해 계속해서 그 변수를 사용하고 after를 사용하려면 함수를 따로 선언해 사용할 수 있도록 해준다. 자세한 건 React 1에 있는 Github 주소를 보면 알 수 있다.
이벤트 처리
HTML에서 이벤트 처리할 때와 React에서 이벤트 처리할 때와 다른 것은 이벤트 문법들은 {}, 여기 이 중괄호에 넣는다는 점이었다.
<button onClick={handleEvent}>Event Click</button>'2nd of BEB > Codestates' 카테고리의 다른 글
BEB Section 2 - HTTP/네트워크 기초 (1) 2021.12.11 BEB Section 1 - JS/Node 비동기 (4) 2021.12.09 BEB Section 1 - React 1 (1) 2021.11.30 BEB Section 1 - 고차함수 (2) 2021.11.25 BEB Section 1 - 웹개발 기초 : DOM (0) 2021.11.22