헤더 탭하면 알림창 띄우는 이벤트 추가 합니다.
헤더 이벤트 추가 합니다.
export default function App() {
const topics = [
{ id: 1, title: "html", body: "html is ..." },
{ id: 2, title: "css", body: "css is ..." },
{ id: 3, title: "javascript", body: "javascript is ..." },
];
return (
<div className="App">
<Header
title="WEB"
onChangeMode={function () {
alert("Header");
}}
></Header>
<Nav topics={topics}></Nav>
<Article title="Welcome" body="Hello, Web"></Article>
</div>
);
}
Completion
<Header title="WEB" onChangeMode={function(){
alert('Header');
}}></Header>
펑션앱 리턴 헤더태그
알림창 펑션 추가 합니다.
헤더에 이벤트 추가하고 헤더/앱 코드 정리 합니다.
function Header(props) {
console.log("props", props.title);
return (
<header>
<h1>
<a
href="/"
onClick={(event) => {
event.preventDefault();
props.onChangeMode();
}}
>
{props.title}
</a>
</h1>
</header>
);
}
Completion
<h1><a href="/" onClick={function(event){
event.preventDefault();
props.onChangeMode();
}}>{props.title}</a></h1>
펑션헤더 리턴 에이치원태그
의미없는 리로드를 막아야 합니다.
- 프리벤트디폴트로 막습니다.
알림창을 띄워야 합니다.
- 온체인지모드 콜합니다.
<h1><a href="/" onClick={(event)=>{
event.preventDefault();
props.onChangeMode();
}}>{props.title}</a></h1>
펑션헤더 리턴 에이치원태그
코드 체지방 줄입니다.
- 펑션을 애로우 펑션으로 변경합니다.
export default function App() {
const topics = [
{ id: 1, title: "html", body: "html is ..." },
{ id: 2, title: "css", body: "css is ..." },
{ id: 3, title: "javascript", body: "javascript is ..." },
];
return (
<div className="App">
<Header
title="WEB"
onChangeMode={() => {
alert("Header");
}}
></Header>
<Nav topics={topics}></Nav>
<Article title="Welcome" body="Hello, Web"></Article>
</div>
);
}
Completion
<Header title="WEB" onChangeMode={()=>{
alert('Header');
}}></Header>
펑션앱 리턴 헤더태그
코드 체지방 줄입니다.
- 펑션을 애로우 펑션으로 변경합니다.
test

상단 웹 탭하고 알림창 체크 합니다.
네브 탭하면 알림창에 해당 아이디 데이터바인딩 합니다.
export default function App() {
const topics = [
{ id: 1, title: "html", body: "html is ..." },
{ id: 2, title: "css", body: "css is ..." },
{ id: 3, title: "javascript", body: "javascript is ..." },
];
return (
<div className="App">
<Header
title="WEB"
onChangeMode={() => {
alert("Header");
}}
></Header>
<Nav
topics={topics}
onChangeMode={(id) => {
alert(id);
}}
></Nav>
<Article title="Welcome" body="Hello, Web"></Article>
</div>
);
}
Completion
<Nav topics={topics} onChangeMode={(id)=>{
alert(id);
}}></Nav>
펑션앱 리턴 네브태그
펑션네브에 토픽스데이터와 온체인지메서드 펑션 전달 합니다.
파라미터로 토픽스아이디를 사용해서 네브 탭하면 해당 항목 아이디를 알림창으로 표시 합니다.
function Nav(props) {
const lis = [];
for (let i = 0; i < props.topics.length; i++) {
let t = props.topics[i];
lis.push(
<li key={t.id}>
<a
id={t.id}
href={"/read/" + t.id}
onClick={(event) => {
event.preventDefault();
props.onChangeMode(event.target.id);
}}
>
{t.title}
</a>
</li>
);
}
return (
<nav>
<ol>{lis}</ol>
</nav>
);
}
Completion
const lis = []
for(let i=0; i<props.topics.length; i++) {
let t = props.topics[i];
lis.push(<li key={t.id}>
<a id={t.id} href={'/read/'+t.id} onClick={event=>{
event.preventDefault();
props.onChangeMode(event.target.id);
}}>{t.title}</a>
</li>);
}
펑션네브 리턴 위
빈 어레이를 만들어 리스트 저장 준비 합니다.
토픽스 어레이를 털어서 리스트 아이템을 생성합니다.
의미없는 리로드 막습니다.
아이디로 펑션콜 합니다.
그러면 펑션앱에서 이 아이디를 파라미터로 받아 이벤트를 실행할 것입니다.
test

네브 탭하면 해당 아이디가 뜨는지 체크 합니다.
Completion
import "./styles.css";
function Header(props) {
console.log("props", props.title);
return (
<header>
<h1>
<a
href="/"
onClick={(event) => {
event.preventDefault();
props.onChangeMode();
}}
>
{props.title}
</a>
</h1>
</header>
);
}
function Nav(props) {
const lis = [];
for (let i = 0; i < props.topics.length; i++) {
let t = props.topics[i];
lis.push(
<li key={t.id}>
<a
id={t.id}
href={"/read/" + t.id}
onClick={(event) => {
event.preventDefault();
props.onChangeMode(event.target.id);
}}
>
{t.title}
</a>
</li>
);
}
return (
<nav>
<ol>{lis}</ol>
</nav>
);
}
function Article(props) {
return (
<article>
<h2>{props.title}</h2>
{props.body}
</article>
);
}
export default function App() {
const topics = [
{ id: 1, title: "html", body: "html is ..." },
{ id: 2, title: "css", body: "css is ..." },
{ id: 3, title: "javascript", body: "javascript is ..." },
];
return (
<div className="App">
<Header
title="WEB"
onChangeMode={() => {
alert("Header");
}}
></Header>
<Nav
topics={topics}
onChangeMode={(id) => {
alert(id);
}}
></Nav>
<Article title="Welcome" body="Hello, Web"></Article>
</div>
);
}
Comment ver
// 애플리케이션의 스타일을 정의하는 CSS 파일을 불러옵니다.
import "./styles.css";
// 애플리케이션의 헤더 부분을 렌더링하는 Header 컴포넌트입니다.
// props로 title을 받아 제목으로 표시하며, 클릭 시 onChangeMode 함수를 호출합니다.
function Header(props) {
// props로 전달된 title 값을 콘솔에 출력하여 디버깅에 활용합니다.
console.log("props", props.title);
return (
<header>
<h1>
<a
href="/" // 기본적으로 루트 경로로 이동하도록 설정되어 있습니다.
onClick={(event) => {
event.preventDefault(); // 기본 링크 이동 동작을 방지합니다.
props.onChangeMode(); // props로 전달된 onChangeMode 함수를 호출합니다.
}}
>
{props.title} {/* props로 받은 title을 표시합니다. */}
</a>
</h1>
</header>
);
}
// 내비게이션 메뉴를 렌더링하는 Nav 컴포넌트입니다.
// topics 배열을 받아 각 항목을 리스트로 표시하며, 클릭 시 onChangeMode 함수를 호출합니다.
function Nav(props) {
const lis = []; // 리스트 아이템들을 저장할 배열입니다.
// props로 전달된 topics 배열을 순회하며 리스트 아이템을 생성합니다.
for (let i = 0; i < props.topics.length; i++) {
let t = props.topics[i]; // 현재 순회 중인 topic 객체입니다.
lis.push(
// React 리스트 렌더링 시에는 각 아이템에 고유한 key prop을 할당해야 합니다.
<li key={t.id}>
<a
id={t.id} // 항목의 고유 ID를 HTML 요소의 id 속성으로 할당합니다.
href={"/read/" + t.id} // 클릭 시 이동할 경로를 정의합니다.
onClick={(event) => {
event.preventDefault(); // 기본 링크 이동 동작을 방지합니다.
// 클릭된 항목의 id를 인자로 하여 onChangeMode 함수를 호출합니다.
props.onChangeMode(event.target.id);
}}
>
{t.title} {/* topic의 title을 표시합니다. */}
</a>
</li>
);
}
return (
<nav>
<ol>{lis}</ol> {/* 생성된 리스트 아이템들을 정렬된 목록으로 렌더링합니다. */}
</nav>
);
}
// 콘텐츠 본문을 렌더링하는 Article 컴포넌트입니다.
// props로 title과 body를 받아 제목과 내용으로 표시합니다.
function Article(props) {
return (
<article>
<h2>{props.title}</h2> {/* props로 받은 title을 제목으로 표시합니다. */}
{props.body} {/* props로 받은 body를 내용으로 표시합니다. */}
</article>
);
}
// 애플리케이션의 메인 컴포넌트입니다.
// Header, Nav, Article 컴포넌트들을 조합하여 전체 UI를 구성합니다.
export default function App() {
// 애플리케이션에서 다룰 주제 목록 데이터입니다.
const topics = [
{ id: 1, title: "html", body: "html is ..." },
{ id: 2, title: "css", body: "css is ..." },
{ id: 3, title: "javascript", body: "javascript is ..." },
];
return (
<div className="App">
{/* Header 컴포넌트에 title과 onChangeMode 함수를 전달합니다. */}
<Header
title="WEB"
onChangeMode={() => {
alert("Header"); // Header 클릭 시 "Header" 메시지를 표시합니다.
}}
></Header>
{/* Nav 컴포넌트에 topics 데이터와 onChangeMode 함수를 전달합니다. */}
<Nav
topics={topics}
onChangeMode={(id) => {
alert(id); // Nav 항목 클릭 시 해당 항목의 id를 메시지로 표시합니다.
}}
></Nav>
{/* Article 컴포넌트에 title과 body 내용을 전달합니다. */}
<Article title="Welcome" body="Hello, Web"></Article>
</div>
);
}

'생활코딩! React 리액트 프로그래밍' 카테고리의 다른 글
| egoing - React - create (0) | 2025.06.23 |
|---|---|
| egoing - React - state (0) | 2025.06.23 |
| egoing - React - props - array (0) | 2025.06.21 |
| egoing - React - props (0) | 2025.06.21 |
| egoing - React - component (0) | 2025.06.20 |