props 는 properties의 줄임말이다.
어떠한 값을 컴포넌트에게 전달해줘야 할 때 props를 사용한다.
name값을 입력한 후, 컴포넌트에 props를 파라미터로 받아주고 {props.name}으로 사용
import Hello from './hello.js';
function App() {
return (
<Hello name = "react" />
);
}
export default App;
import React from "react";
function Hello(props) {
return <div>안녕하세요 {props.name} </div>;
}
export default Hello;
App.js 에서 hello컴포넌트에 넣어준 name, color 가 props이다.
Hello.js hello컴포넌트는 props를 파라미터로 받아올수있는데 비구조화할당을하면 바로 추출해서 사용할수있다.
import Hello from "./hello.js";
export default function App() {
return <Hello name="react" color="red" />;
}
import React from "react";
function Hello(props) {
return <div style={{ color : props.color }}>안녕하세요 {props.name} </div>;
}
export default Hello;
원래는 이런식으로 props를 매개변수로 두고 props.color 로 값을 전달했다.
하지만 props.color
props.name
등 사용할 떄 마다 props.
를 앞에 붙여야하니 귀찮다. 이럴땐 비구조화 할당이 가능하다
import React from "react";
function Hello({ name , color }) {
return <div style = {{ color }}>안녕하세요 {name} </div>;
}
export default Hello;
defaultProps
: 특정값을 빠뜨렸을때 기본적으로 설정할 값
import Hello from "./hello.js";
export default function App() {
return (
<>
<Hello name="react" color="red" />
// 기존거에 name이 없는 Hello컴포넌트 추가
<Hello color="pink" />
</>
);
}
import React from "react";
function Hello({ name, color }) {
return <div style={{ color }}>안녕하세요 {name} </div>;
}
// 기본값 설정
Hello.defaultProps = {
name: "이름없음"
};
export default Hello;
컴포넌트 태그 사이에 넣은 값을 조회하고 싶을 땐, props.children
를 조회한다.
wrapper.js 에서는 children 을 사용햇는데 wrapper 태그와 태그사이에 있는 내용이 children이다. (
<Wrapper>
children</Wrapper>
)
props.children
를 사용하는 새로운 컴포넌트 Wrapper.js를 만들어보자
import React from "react";
function Wrapper() {
const style = {
border: "2px solid black",
padding: 16
};
return <div style={style}></div>;
}
export default Wrapper;
import Hello from "./hello.js";
// Wrapper.js 연결
import Wrapper from "./Wrapper.js";
export default function App() {
return (
// Wrapper태그로 감싸줌
<Wrapper>
<Hello name="react" color="red" />
<Hello color="pink" />
</Wrapper>
);
}
이렇게 Wrapper
태그 내부에 Hello
컴포넌트 두개를 넣었다.
하지만 Heloo
컴포넌트가 보여지지 않는것을 확인할 수 있다.
내부의 내용이 보여지게 하기 위해서는 컴포넌트에서 children을 렌더링 해줘야한다.
즉, Wrapper
에서 props.children
을 렌더링해야한다.
import React from "react";
function Wrapper({ children }) {
const style = {
border: "2px solid black",
padding: 16
};
return <div style={style}>{ children }</div>;
}
export default Wrapper;