티스토리 뷰
1. 리액트 게시판 컴포넌트 구조
이 코드는 **데이터(State)**가 바뀌면 화면이 어떻게 자동으로 변하는지 보여주는 가장 기초적이고 중요한 예시입니다.
JavaScript
import React, { useState } from 'react';
// 1. 작은 블록(컴포넌트) 만들기
function BoardItem({ post }) {
return (
<div className="board-row" style={{ display: 'flex', borderBottom: '1px solid #ddd', padding: '10px' }}>
<div style={{ width: '50px' }}>{post.id}</div>
<div style={{ flex: 1 }}>{post.title}</div>
<div style={{ width: '100px' }}>{post.writer}</div>
</div>
);
}
// 2. 메인 화면 컴포넌트
export default function BoardApp() {
// 💡 State: 게시글 데이터 관리 (이 값이 변하면 화면이 다시 그려짐)
const [posts, setPosts] = useState([
{ id: 1, title: "리액트 기초 배우기", writer: "김철수" },
{ id: 2, title: "컴포넌트란 무엇인가?", writer: "이영희" }
]);
// 💡 데이터 추가 함수
const addPost = () => {
const newPost = { id: posts.length + 1, title: "새로운 게시글입니다", writer: "익명" };
setPosts([...posts, newPost]); // 기존 리스트에 새 글 추가
};
return (
<div style={{ padding: '20px' }}>
<h2>리액트 게시판 실습</h2>
<button onClick={addPost} style={{ marginBottom: '10px' }}>글 추가하기</button>
<div className="board-container" style={{ border: '1px solid #000' }}>
{/* 💡 반복문(map)을 사용하여 리스트 출력 */}
{posts.map(post => (
<BoardItem key={post.id} post={post} />
))}
</div>
</div>
);
}
2. 이 코드의 핵심 맥락 (기존 방식과의 차이점)
- 선언적 프로그래밍: 기존(Vanilla JS)에는 document.createElement로 요소를 만들고 appendChild로 직접 집어넣었죠? 리액트에서는 **"데이터가 이러이러하니 화면은 이렇게 그려져야 한다"**라고 미리 선언만 해둡니다. 그러면 데이터(posts)가 바뀔 때 리액트가 알아서 그려줍니다.
- 데이터 흐름 (Props): BoardApp(부모)이 가진 post 데이터를 BoardItem(자식)에게 전달합니다. 자식은 그 데이터를 받아서 화면에 보여주기만 하는 역할분담이 명확해집니다.
- 불변성 (Immutability): posts.push()를 직접 쓰지 않고 setPosts([...posts, newPost])처럼 새로운 배열을 만들어 교체합니다. 그래야 리액트가 "어? 데이터가 바뀌었네? 다시 그려야지!"라고 인식하기 때문입니다.
3. 리액트를 시작하기 위한 준비물
이제 이 개념을 실제 컴퓨터에서 실행해 보려면 다음 과정이 필요합니다.
- Node.js 설치: 리액트 개발 환경을 실행하기 위한 엔진입니다.
- Vite (또는 Create React App): 리액트 프로젝트의 뼈대를 자동으로 만들어주는 도구입니다.
- VS Code: 코드를 작성할 에디터입니다.
※ 해당 내용은 Google Gmini3.0에서 작성되었습니다.
'WEB > react.js' 카테고리의 다른 글
| React Router (0) | 2026.01.14 |
|---|---|
| React 개발을 위해 반드시 알아야 할 5가지 핵심 기본 문법 (0) | 2026.01.14 |
| react 설치 기본포트설정이 5173인가요? (0) | 2026.01.14 |
| react 5단계 핵심 개념 (0) | 2026.01.14 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 자바스크립트정규표현식
- ajax
- echart
- 증폭기 #아이피타임증폭기
- 무료폰트 #무료웹폰트 #한수원한돋움 #한수원한울림 #한울림체 #한돋움체
- 좋은책
- 탭메뉴자바스크립트
- 썬크림 #닥터지썬크림 #내돈내산 #내돈내산썬크림 #썬크림추천 #spf50썬크림 #닥터지메디유브이울트라선
- 자바스크립트break
- 와이파이증폭기추천 #와이파이설치
- 테스크탑무선랜카드 #무선랜카드 #아이피타이무선랜카드 #a3000mini #무선랜카드추천
- sw기술자평균임금 #2025년 sw기술자 평균임금
- jdk #jre
- 와이파이신호 #와이파이 #와이파이신호세게
- 쇼팬하우어 #좋은책
- 자바스크립트 #javascript #math
- 정보처리기사 #정보처리기사요약 #정보처리기사요점정리
- 파비콘 #파비콘 사이트에 적용
- 바지락칼국수 #월곡동칼국수 #칼국수맛집
- SQL명령어 #SQL
- jQuery #jQuery이미지슬라이드 #이미지슬라이드
- 연명의료결정제도 #사전연명의료의향서 #사전연명의료의향서등록기관 #광주사전연명의료의향서
- 파비콘사이즈
- 자바스크립트countiue
- 좋은책 #밥프록터 #부의원리
- thymeleaf
- css미디어쿼리 #미디어쿼리 #mediaquery
- lg그램pro #lg그램 #노트북 #노트북추천 #lg노트북
- 광주분식 #광주분식맛집 #상추튀김 #상추튀김맛집 #광주상추튀김
- iptime와이파이증폭기 #와이파이증폭기설치
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
글 보관함

