: 부모 컴포넌트로부터 자식 컴포넌트에 데이터를 보낼 수 있게 해주는 방법.
ex) 중복되는 디자인의 여러 버튼 생성(저장 버튼, 삭제 버튼, 수정 버튼 등)
컴포넌트를 하나만 만들고 props를 통해 몇몇 요소만 바꾸어 재사용할 수 있다.
props.내가 설정한 key
로 꺼낼 수 있다.function Btn(props){
return(
<button style = {{
backgroundColor : "tomato",
color : "white",
padding : "10px 20px",
borderRadius : 10,
}}>
{props.text}
</button>
)
}
function App(){
return(
<div>
<Btn text="save" lalala="saving"/> // 마음대로 설정
<Btn text="delete" lalala="deleting"/>
</div>
)
}
{ }
로 값을 받는 것.(ES6)function Btn({text = "button", info}){
return(
<button style = {{
backgroundColor : info ? "blue" : "tomato", // 활용
color : "white",
padding : "10px 20px",
borderRadius : 10,
}}>
{text}
</button>
)
}
function App(){
return(
<div>
<Btn text="save" info={true}/> // 마음대로 설정
<Btn text="delete" info={false}/>
</div>
)
}
props로 함수도 넘겨줄 수 있다.
function Btn({text, info, click}){
return(
<button style = {{
backgroundColor : info ? "blue" : "tomato", // 활용
color : "white",
padding : "10px 20px",
borderRadius : 10,
}} onClick = {click}>
{text}
</button>
)
}
function App(){
const [value, setValue] = React.useState("Save");
const changeValue = () => setValue("Revert Changes");
return(
<div>
<Btn text={value} info={true} click={changeValue}/>
<Btn text="delete" info={false}/>
</div>
)
}
: 특정 컴포넌트가 다시 렌더링 되는 것을 막을 때 사용.
ex. props 변경사항 없으면 다시 렌더링 할 필요 없음.
function Btn({text, info, click}){
return(
<button style = {{
backgroundColor : info ? "blue" : "tomato", // 활용
color : "white",
padding : "10px 20px",
borderRadius : 10,
}} onClick = {click}>
{text}
</button>
)
}
const MemorizeBtn = React.memo(Btn); // memo
function App(){
const [value, setValue] = React.useState("Save");
const changeValue = () => setValue("Revert Changes");
return(
<div>
<MemorizeBtn text={value} info={true} click={changeValue}/>
<MemorizeBtn text="delete" info={false}/> // 변경사항 없어서 다시 렌더링 안 됨.
</div>
)
}
: 어떤 타입의 prop을 받고 있는지 체크해줌.
isRequired
를 붙여줌.step 1. install 하기
npm i prop-types
step 2. 상단에 import 하기
import PropTypes from "prop-types”
<Btn text={14} fontSize={"2"}/>
Btn.propTypes = {
text : PropTypes.string.isRequired,
fontSize : PropTypes.number,
}
아무이름.module.css
예제)
Button.module.css
.btn{
color : white;
}
Button.js
import styles from "./Button.module.css"
function Button(){
return <button className={styles.btn}>hello</button>
}