일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Computer Science
- Python
- codestates
- 자바
- python algorithm
- 알고리즘
- 비동기
- algorithm
- 파이썬
- 프로그래머스
- java
- JavaScript
- node.js
- react 기초
- 글또
- Operating System
- 자바스크립트
- 컴퓨터공학
- Zerobase
- 코드스테이츠
- OS
- 개발공부
- 파이썬 알고리즘 인터뷰
- REACT
- useState
- 운영체제
- typeScript
- context switching
- 자료구조
- execution context
- Today
- Total
Back to the Basics
[React][Codestates] React State & Props , props.children 본문
[React][Codestates] React State & Props , props.children
9Jaeng 2021. 8. 19. 21:22React State & Props
Achievement Goals
- state, props의 개념에 대해서 이해하고, 실제 프로젝트에 적용할 수 있다.
- React 함수 컴포넌트(React Function Component)에서 state hook을 이용하여 State를 정의 및 변경할 수 있다.
- React 컴포넌트 (React Component)에 props를 전달할 수 있다.
- 실제 웹 애플리케이션의 컴포넌트를 보고 어떤 데이터가 state이고 props에 적합한지 판단할 수 있다.
- 실제 웹 애플리케이션 개발 시 적합한 state와 props의 위치를 스스로 정할 수 있다.
- React의 단방향 데이터 흐름(One-way flow)에 대해 자신의 언어로 설명할 수 있다.
State & props Intro
State
- React에서 State는 컴포넌트 사용 중 컴포넌트 내부에서 변할 수 있는 값
Props vs State
- props는 위로부터 전달받은 값
- state 는 내부에서 변화하는 값
Props 또는 State에 적합한 것은?
실제 생활에서 pops와 state를 나눈다면?
- 이름 : props - 변하지 않음 (개명 안 한다 가정)
- 성별 : props - 변하지않음 (성전환 안한다 가정)
- 나이 : state - 1년마다 변함
- 현재 사는 곳 : state - 이사할 때마다 변함
- 취업 여부 : state - 취업 퇴사 ㅎ
- 결혼/연래 여부 : state - 결혼 이혼 등 변함
- UI component에서 props와 state를 나눈다면?
- Toggle Switch
- State : On / OFF 여부 --> code로 { isOn : true} , {isOn : false} state가 변한다
- Counter
- State : 현재 숫자 값 --> code로 {count : 0} , {count : 3} { count : 6} 등 state가 변한다
Props
props의 특징
[20100809]- React-Components and Props 공식문서를 통해 조금 정리를 해보았으니 참고해보자!
- props는 컴포넌트의 속서(property)를 의미한다. 외부로부터 전달받은 값이며, 변하지 않는다
- props는 부모 컴포넌트로부터 전달받은 값이며, 마치 함수의 전달 인자(argumrnt)처럼 전달받아서 React 엘리먼트를 반환한다.
그렇기 때문에 컴포넌트가 최초 렌더링 될 때에 화면에 출력하고자 하는 데이터를 담은 초기값으로 사용할 수 있다. - props는 객체 타입이기 때문에 어떠한 타입의 값도 전달이 가능하다.
- props는 Read Only 이기 때문에 자식 컴포넌트에서 함부로 변경할 수 없다. 이는 개발자가 의도하지 않은 Side effect를 방지하고 데이터 흐름 원칙 (React is all about one-way date flow down the component hierarchy)에 위배되기 때문이다. 이러한 방식을 단방향, 하향식 데이터 흐름이라고 한다. props를 사용하는 방법 3단계로
How to use props
props를 사용하는 방법을 5단계로 나눠보았다.
- 사용할 상위 컴포넌트와 하위 컴포넌트를 선언한다.
- 상위 컴포넌트 안에 하위 컴포넌트를 작성한다.
- 상위 컴포넌트에서 하위 컴포넌트로 전달하고자 하는 값과 속성을 정의한다.
- props를 이용하여 상위 컴포넌트에서 정의한 값과 속성을 전달한다.
- 전달받은 props를 사용 또는 렌더링 한다.
코드를 보면서 위의 세 단계를 적용해보자.
- 사용할 상위 컴포넌트와 하위 컴포넌트를 선언한다.
- 상위 컴포넌트 안에 하위 컴포넌트를 작성한다.
{/* Parent Component*/}
function Parent(){
return(
<div className="parent">
<h1>I am the parent component</h1>
<div>I want to transfer my state to my child
<Child />
<Child />
</div>
</div>
)
}
{/* Child Component */}
function Child(){
console.log("props:",props);
return (
<div className="child">
<p>여기에 props를 넣을 것임</p>
<p>여기에도 props를 넣을 것임</p>
</div>
)
}
위의 코드에서와 같이 (1) 먼저 각 컴포넌트를 선언하고 (2) Child 컴포넌트를 상위 컴포넌트 (Parent)에 작성한다.
- 상위 컴포넌트에서 하위 컴포넌트로 전달하고자 하는 값과 속성을 정의한다.
{/* Parent Component*/}
function Parent(){
const text2="I wanna sleep now";
return(
<div className="parent">
<h1>I am the parent component</h1>
<div>I want to transfer my state to my child
<Child text={"i'm the eldest child"} />
<Child text={text2} />
</div>
</div>
)
}
HTML에서 속성과 값을 할당하는 방법은 아래와 같다.
<a href="https://github.com/sora9z"> Click me to visit Sora's git hub repo</a>
React에서도 이와 동일하다
위의 Parent 코드처럼 "text"라는 속성을 선언하고, 이 속성에 "i'm the eldest child"라는 문자열을 { } 안에 할당하여 Child 컴포넌트에 전달할 수 있다. 또는 상위 컴포넌트에 번수를 선언하여 하위 컴포넌트 속성 값으로 { } 안에 변수를 넣는 방법도 있다.
- props를 이용하여 상위 컴포넌트에서 정의한 값과 속성을 전달한다.
function Child(props){
<div className="child">
<p>{props.text}</p>
</div>
}
이제 상위 컴포넌트에서 전달한 속성 값을 하위 컴포넌트에서 받아보겠다.
함수에 인자를 전달하듯 React component에 props를 전달하면 , props가 필요한 모든 데이터를 가져오게 된다.
- 전달받은 props를 사용 또는 렌더링 한다.
props는 위에서 말했듯이 객체이고, key : value는 Parent에서 정의한 {text : text2}의 형태이다. 따라서 dot notation을 중괄호 안에 넣어 사용하면 된다.
function Child(props){
console.log("props:",props);
return (
<div className="child">
<p>{props.text}</p>
</div>
)
}
npm run start로 결과를 확인하면 아래와 같다.
props.children
props를 전달하는 방법 중 또 한 가지는 props.children을 사용하여 태그와 태그 사이에 value를 넣어 전달할 수 있다.
function Parent(){
return(
<div className="parent">
<h1>I am the parent component</h1>
<div>
<Child> I'm the older child </Child>
</div>
</div>
)
}
function Child(props){
console.log("props:",props);
return (
<div className="child">
<p>{props.children}</p>
</div>
)
}
위와 같이 Child 태그 사이의 값을 props.children을 사용하여 사용하 수 있다.
공식문서를 참고하여 더 공부해보자!
https://reactjs.org/docs/composition-vs-inheritance.html
[
Composition vs Inheritance – React
A JavaScript library for building user interfaces
reactjs.org
'Frontend Development > React' 카테고리의 다른 글
[React]React Event Handling (0) | 2021.08.20 |
---|---|
[React][Codestates]- React State - useState , state Hook (0) | 2021.08.19 |
[React][Codestates]- React Twittler Intro - Advanced (0) | 2021.08.19 |
[React][Codestates] React SPA & Router (0) | 2021.08.12 |
[React] React-State and Lifecycle (0) | 2021.08.11 |