배..고파
function SaveBtn() {
return <button>Save Changes</button>;
}
function ConfirmBtn() {
return <button>Confirm</button>;
}
function App() {
return (
<div>
<SaveBtn />
<ConfirmBtn />
</div>
);
}
function SaveBtn() {
return <button
style={{
backgroundColor:"tomato",
color:"white",
padding:"10px 20px",
border:0,
borerRadius:10,
}}>
Save Changes
</button>;
}
function ConfirmBtn() {
return <button>Confirm</button>;
}
function App() {
return (
<div>
<SaveBtn />
<ConfirmBtn />
</div>
);
}
SaveBtn()
에 스타일을 추가했다.ConfirmBtn()
버튼에도 스타일을 추가해야한다면?function Btn() { <<<---
return <button
style={{
backgroundColor:"tomato",
color:"white",
padding:"10px 20px",
border:0,
borerRadius:10,
}}>
{text}
</button>;
}
function App() {
return (
<div>
<Btn text="Save Change" /> <<<---
<Btn text="Confirm"/> <<<---
//→ 이름은 아무렇게나 지어도 된다.
</div>
);
}
function Btn(porps) { <<<---
//→ 첫번째 인자의 이름은 아무렇게나 지어도 된다.
//→ 첫번째 인자는 객체(object).
return <button
style={{
backgroundColor:"tomato",
color:"white",
padding:"10px 20px",
border:0,
borerRadius:10,
}}>
{porps.text} <<<---
</button>;
}
function Btn({ text }) { <<<---
return <button
style={{
backgroundColor:"tomato",
color:"white",
padding:"10px 20px",
border:0,
borerRadius:10,
}}>
{text} <<<---
</button>;
}
React.memo()
괄호안에 감싸주면 된다.function App() {
const [value, setValue] = useState("Save Changes")
const ChangeValue = () => setValue("Revert Changes")
return (
<div>
<Btn text={value} onClick={ChangeValue} />
<Btn text="Continue"/>
</div>
);
}
<Btn text={value} onClick={ChangeValue} />
에 있는 onClick={ChangeValue}
은 이벤트리스너가 아닌, prop 이다.function Btn({ text, onClick }) { <<<---
return <button
onClick={onClick} <<<---
style={{
backgroundColor:"tomato",
color:"white",
padding:"10px 20px",
border:0,
borerRadius:10,
}}>
{text}
</button>;
}
onClick
함수가 호출되며, 첫번째 Btn 의 value 값이 변경(업데이트)되는데,return
에 포함되어있는 코드들이 모두 리렌더링된다.React.memo()
를 사용하여, 컴포넌트의 props,state(상태)가 바뀌지 않은 것은 리렌더링하지 말라 명령하면 된다.function Btn({ text, onClick }) {
return <button
onClick={onClick}
style={{
backgroundColor:"tomato",
color:"white",
padding:"10px 20px",
border:0,
borerRadius:10,
}}>
{text}
</button>;
}
const MemorizedBtn = React.memo(Btn) <<<---
function App() {
const [value, setValue] = useState("Save Changes")
const ChangeValue = () => setValue("Revert Changes")
return (
<div>
<MemorizedBtn text={value} onClick={ChangeValue} /> <<<---
<MemorizedBtn text="Continue"/> <<<---
</div>
);
}
const MyComponent = React.memo(function MyComponent(props) {
/* props를 사용하여 렌더링 */
});
🚩 React memo : https://ko.reactjs.org/docs/react-api.html#reactmemo