props란 부모 컴포넌트로부터 전달받은 데이털르 지니고 있는 객체를 의미 합니다.
부모 컴포넌트에서 tag에 속성을 주입하듯 자식 컴포넌트에 전달하고자 하는 데이터를 추가하면 props를 이용하여 모든 타입의 데이터와 함수까지도 전달할 수 있습니다.
props
란 컴포넌트의 속성값을 의미합니다.import React from 'react';
const Parent = () => {
const animal = '호랑이';
return (
<>
<h1>부모 컴포넌트입니다.</h1>
<p>{animal}</p>
</>
);
};
export default Parent;
지금 위의 예시에서는 하나의 컴포넌트가 '호랑이' 라는 문자열을 animal 이라는 변수에 담아 관리하는 것을 볼 수 있습니다.
이렇게 변수 안에 담아두면 animal 이라는 변수를 사용해서 <p>{animal}</p>
과 같이 사용해서 화면에 표현할 수 있습니다.
그런데 여기서 컴포넌트가 위의
parent
라는 컴포넌트 말고도Child
라는 컴포넌트가 하나 더 있다고 가정하고 화면에 똑같이Child
컴포넌트에도 '호랑이' 라는 문자열을 화면에 표시하려면 어떻게 해야 할까요?
물론 제일 간편한 방법은 Child
컴포넌트에 똑같이 데이터를 직접 선언하고 표현하는 방법을 생각하셨을겁니다.
하지만 부모 컴포넌트에서 이미 선언한 부분과 중복이 되기 때문에 비효율적이라고도 생각할 수 있을 것 같습니다.
자 그럼 이런 비효율적인 부분을 해결하기 위해 props를 사용해봅시다.
import React from 'react';
import Child from './Child';
const Parent = () => {
const animal = '호랑이';
return (
<>
<h1>부모 컴포넌트입니다.</h1>
<p>{animal}</p>
<Child pet={animal} englishName='tiger' /> // 추가된 코드
</>
);
};
export default Parent;
import Child from './Child';
이 것과 <Child pet={animal} englishName='tiger' />
이런 코드가 추가됬네요.Child
컴포넌트를 만들고 import를 합니다.import Child from './Child';
<Child />
컴포넌트를 return 문 내에 넣어줍니다.<Child />
어떤 데이터를 자식 컴포넌트로 보낼 것인가
를 생각해야 합니다.animal
이라는 변수 입니다.pet={animal}
과 같이 자식 컴포넌트로 속성값을 추가해줍니다.
pet={animal}
pet = 자식 컴포넌트에서 데이터를 받을 때 사용되는 인식표
animal
이라는 변수에 담겨있듯 부모 컴포넌트에서 선언된 animal이라는 변수를 자식 컴포넌트에 넘겨줄 때 pet
이라는 그릇에 담아 보내주는 것 입니다.pet
이라는 그릇에 변수를 담아 보내주었습니다.// Child.js(자식 컴포넌트)
import React from 'react';
const Child = (props) => {
console.log(props); // {pet: '호랑이', englishName: 'tiger'}
return (
<>
<h2>자식 컴포넌트입니다.</h2>
<p>{props.pet}</p> // 호랑이
<p>{props.englishName}</p> // tiger
</>
);
};
export default Child;
const Child = (매개변수) => {}
와 같이 부모 컴포넌트에서 보내준 데이터를 받아서 사용할 수 있습니다. const Child = (props) => {}
라고 매개변수 이름을 짓는 것이 컨밴션 입니다.console.log(props)
를 통해서 값이 어떻게 넘어오는지 확인해보면 더 확실하게 알 수 있습니다.EX) (props.pet , props['englishName'])
// Parent.js(부모 컴포넌트)
import React from 'react';
import Child from './Child';
const Parent = () => {
const testConsole = () => {
console.log('테스트 입니다.');
};
return (
<>
<h1>부모 컴포넌트입니다.</h1>
<button onClick={testConsole}>클릭</button>
<Child test={testConsole} />
</>
);
};
export default Parent;
testConsole
이라는 함수를 선언했습니다. 그리고 이 함수가 버튼을 클릭할 때마다 실행될 수 있도록 클릭 이벤트 핸들러
에 걸어주었습니다.test={testConsole}
// Child.js (자식 컴포넌트)
import React from 'react';
const Child = (props) => {
console.log(props); // {test: () => {console.log('테스트 입니다.')}}
return (
<>
<h2>자식 컴포넌트입니다.</h2>
<button onClick={props.test}>클릭</button>
</>
);
};
export default Child;
test
라는 그릇에 담아 전달했습니다.클릭 이벤트 핸들러
를 걸어주었고, 버튼을 클릭할 때마다 실행되는 함수를 부모로부터 받은 test 함수로 정의해주었습니다.