부모 컴포넌트에서 내려준 값을 자식 컴포넌트에서 사용하는 것을 의미
컴포넌트에서 다른 컴포넌트로 데이터 전달(props 전달)
전달기능(함수)는 부모 컴포넌트에서 구현 부모->자식에게 전달(형제 컴포넌트는 서로 props를 전달할 수 없다)
자식 컴포넌트에서 부모 컴포넌트로 콜백 함수를 사용하여 props를 전달할 수 있음
부모 -> 자식에게 전달
// 부모
import React from 'react';
import Child from './Child';
const Parent = () => {
return(
<div>
<Child money={1000}/>
<!-- money로 props의 속성을 지정 후 값 1000을 할당 -->
</div>
);
};
<!-- 자식 -->
import React from 'react';
const Child = (props) => {
<!-- money -->
return(
<div>
<p>{props.money}</p>
<!-- props 속성에 접근하기 위해 props.money 사용 -->
</div>
);
};
자식 -> 부모에게 전달
// 부모
import React from 'react';
import Child from './Child';
const Parent = () => {
function Click(money){
alert(money);
};
// 부모에서 함수 구현
return(
<div>
<Child money={1000} Click={click} />
</div>
);
};
<!-- 자식 -->
impore React from 'react';
const Child = (props) => {
return(
<div>
<button onClick={() => {
props.Click(props.money);
}};
>
값 전달
</button>
</div>
);
};
부모 컴포넌트에서 전달하는 props 값이 없을 때
// 부모
import React from 'react';
import Child from './Child';
const Parent = () => {
return(
<div>
<Child />
</div>
);
};
<!-- 자식 -->
import React from 'react';
const Child = (props) => {
return(
<div>
<p>{props.money}</p>
<!-- ? 값이 없을경우 -->
</div>
);
};
부모 컴포넌트에서 props를 전달하지 않을 경우 기본값을 설정
기본 값은 컴포넌트 밖에, 자식 컴포넌트 안에서 선언해준다
// 자식 컴포넌트
import React from 'react';
const Child = (props) => {
return(
<div>
<p>{props.money}</p>
</div>
);
};
// 기본 값 설정 !
Child.defaultProps = {
money: 10000
}
// 기본 값의 propTypes 설정
// 설정한 type과 다를 경우 콘솔창에 오류 발생
// import PropTypes from "prop-types"; 해줘야함
// isRequired - 필수 입력
Child.defaultProps = {
name: PropTypes.string.isRequired,
children: PropTypes.number
};
++
// 자식 컴포넌트
import React from 'react';
const Child = (props) => {
return(
<div>
<p>{props.money}</p>
</div>
);
};
const Child = (props) => {}
// 요즘에는 이렇게 안하고
const Child = ({ name, color, subject = "먼지" }: Child) => {}
// 이런식으로 많이 사용한다고 함
사용 예시
import React from 'react';
import Child from './Child';
const Parent = () => {
return(
<div>
<Child name="dust" color="black" subject="먼지" />
<Child name="berry" color="red" subject="빨강" />
<Child />
</div>
);
};
//
import React from 'react';
const Child = (props) => {
return(
<div>
<p style={{ color: props.color }}>{props.name}는 {props.subject}(이)야</p>
</div>
);
};
Child.defaultProps = {
name: 'sea',
color: 'blue',
subject: '파랑'
}
결과
import React from 'react';
import Child from './Child';
const Parent = () => {
return(
<div>
<Child name="dust" color="black" subject="먼지" />
<Child name="berry" color="red" subject="빨강" />
<Child />
</div>
);
};
//
import React from 'react';
////////////// 변경된 부분 ////////////////////////
const Child = ({ name, color, subject }) => {
return(
<div>
//////////// props. 를 제외하고 변수명만 적어줌
<p style={{ color: color }}>{name}는 {subject}(이)야</p>
</div>
);
};
Child.defaultProps = {
name: 'sea',
color: 'blue',
subject: '파랑'
}
또는 이런식으로 변경할 수 있다
props.children
import React from 'react';
import Child from './Child';
const Parent = () => {
return(
<div>
<Child>먼지</Child>
</div>
);
};
//
import React from 'react';
const Child = (props) => {
return(
<div>
<p>{props.name}는 {props.children}(이)야</p>
<!-- dust는 먼지야 -->
<!-- default 값은 밑에서 가져오고 children 값은 태그 내에 있는 값을 가져옴 -->
</div>
);
};
Child.defaultProps = {
name: 'dust'
}
사용 예시
import React from 'react';
import Child from './Child';
import Hello from './Hello';
const Parent = () => {
return(
<div>
<Child>
<p>먼지</p>
<Hello color="pink" />
</Child>
</div>
);
};
<!-- -->
import React from 'react';
const Child = ({ name="dust", children }) => {
return(
<div>
<p>{name}는 {children}</p>
<!--
dust는 먼지
안녕하세요!
/ 출력
-->
</div>
);
};
const Hello({ color }) => {
return <div style={{ color }}> 안녕하세요!(분홍색) </div>
}
여러개의 props
const Parent = () => {
const dust = {
name: 'dust',
color: 'black',
subject: '먼지'
};
<!-- const { name, color, subject } = dust; 생략가능 -->
const dust2 = {
name: 'dust2',
color: 'white',
subject: '먼지2'
};
// 이렇게도 쓸 수 있는지?
<!-- const { name, color, subject } = dust2; 생략가능 -->
return(
<div>
<Child {...dust} />
// 속성값 전부 불러오기
<Child {...dust2}/>
</div>
);
};
//////////////////////////////////////
const Child = ({ color, name, subject }) => {
return(
<div>
<p style={{ color }}>{name}는 {subject}(이)야</p>
<!--
변수명은 달라야하기 때문에 이렇게 사용은 불가능 함
한줄에 dust, dust2를 같이 불러오기x
그렇게 하고 싶을경우 배열로 넘기거나 아니면 변수명이 달라야함
-->
</div>
);
};
Child.defaultProps = {
name: 'sea',
color: 'blue',
subject: '파랑'
}
'개발 > React' 카테고리의 다른 글
[React] Node + Express 서버와 React 연동 (0) | 2022.10.22 |
---|---|
[React] input 상태 관리 (0) | 2022.05.16 |
[React] reduce, useMemo, useCallback (0) | 2022.04.29 |
[React] useEffect (0) | 2022.04.22 |