2. Props 전달하기
2024. 6. 9. 18:42ㆍ리액트 (React)/리액트 레시피 (React Recipt)
Props
각 컴포넌트들은 props를 통해 소통합니다.
아래에서 이름에 해당하는 부분을 ChatBox에서 결정해준다고 하면,
함수의 소괄호(parenthesis) 안에 props를 정의하고
마크업에서는 중괄호(brace)로 해당 이름을 감싸서 사용합니다.
export default function ChatHeader({ name }: { name: string }) {
return (
<div
style={{
...
}}
>
<span>Chat with {name}</span>
</div>
);
}
그러면 ChatBox 입장에서 아래처럼 어트리뷰트로 값을 줄 수 있습니다.
import ChatHeader from "./ChatHeader";
export default function ChatBox() {
return (
<div className="chat-layout">
<div className="chat-box">
<ChatHeader name="Cherry" />
</div>
</div>
);
}
props는 기본값을 가질 수 있으며, 만일 어트리뷰트를 작성하지 않으면 기본값을 사용합니다.
export default function ChatHeader({ name = "Cherry" }: { name?: string }) {
return ...
}
export default function ChatBox() {
return (
<div className="chat-layout">
<div className="chat-box">
<ChatHeader /> {/* set default value to name attribute */}
</div>
</div>
);
}
Children
이제 메시지를 보여줄 창이 필요해졌습니다.
간단히 생각해보면 ChatScreen 아래에 메시지들을 보여주면 되겠네요.
이때 Message들을 ChatScreen의 Children으로 만들어서 전달할 수 있습니다.
export default function ChatMessage() {
return (
<div
style={{
padding: "10px",
}}
>
hello message!
</div>
);
}
import { ReactNode } from "react";
export default function ChatScreen({ children }: { children: ReactNode }) {
return (
<div
style={{
height: "270px",
}}
>
{children}
</div>
);
}
import ChatHeader from "./ChatHeader";
import ChatMessage from "./ChatMessage";
import ChatScreen from "./ChatScreen";
export default function ChatBox() {
return (
<div className="chat-layout">
<div className="chat-box">
<ChatHeader name="Cherry" />
<ChatScreen>
<ChatMessage />
<ChatMessage />
</ChatScreen>
</div>
</div>
);
}
그리고 당연히 ChatMessage에게도 props를 전달할 수 있습니다.
메시지를 ChatBox에서 만든다고 하면,
export default function ChatMessage({ message }: { message: string }) {
return (
<div ...>
{message}
</div>
);
}
import ChatHeader from "./ChatHeader";
import ChatMessage from "./ChatMessage";
import ChatScreen from "./ChatScreen";
export default function ChatBox() {
return (
<div className="chat-layout">
<div className="chat-box">
<ChatHeader name="Cherry" />
<ChatScreen>
<ChatMessage message="first message!" />
<ChatMessage message="second message~" />
</ChatScreen>
</div>
</div>
);
}
Reference
'리액트 (React) > 리액트 레시피 (React Recipt)' 카테고리의 다른 글
5. State로 리렌더링하기 (0) | 2024.06.10 |
---|---|
4. CSS 입히기 (0) | 2024.06.10 |
3. 조건부 렌더링 사용하기 (0) | 2024.06.09 |
1. 컴포넌트 만들어보기 (0) | 2024.06.09 |
타입스크립트 기반 리액트 시작하기 (0) | 2023.12.27 |