🐨CoalaCoding
Docs▾
JavaScriptReactHTML & CSSBackendAI & LLMDev ToolsCreative
B반1
👾숏츠
🙉B반2
게시판
🐨CoalaCoding

개발자를 위한 한국어 웹 기술 문서

문서

  • JavaScript
  • React
  • HTML & CSS
  • Backend
  • AI & LLM
  • Dev Tools
  • Creative

커뮤니티

  • 게시판
  • 예제 모음

기타

  • 관리자

정책

  • 소개
  • 개인정보처리방침
  • 이용약관
  • 연락처
© 2026 CoalaCoding. All rights reserved.
  • React 학습 전 필수 JavaScript 문법
  • 1. React 소스 코드 수정, 배포 및 렌더링
  • 2. 시작
  • 2. JSX 문법과 컴포넌트
  • 3. react-vite-설치
  • 3. 이벤트 처리
  • 4. 노코드리액트
  • 4. Hook
  • 5. csrssrreact-렌더링-참조글
  • 5. useContext로 전역 상태 관리
  • 6. 컴포넌트
  • 6. CSS 리액트에 넣는 5가지 방법
  • 7. 시작하기
  • 7. Props (속성)
  • 8. 2-scaffolding-react-project
  • 8. React Router
  • 9. props
  • 9. React 개발 환경 이해
  • 10. 3-웹문서-작성하기
  • 11. 컴포넌트
  • 12. map과컴포넌트
  • 13. event
  • 14. 4-리액트로-변경하기
  • 15. 컴포넌트-데이터관리
  • 16. composition
  • 17. 앱제작-준비
  • 21. 환경설정
  • 24. 컴포넌트-전략
  • 25. 리액트-네이버-로그인
  • 26. 리액트교안
  1. 홈
  2. 문서
  3. React
  4. React 기초
  5. 17. 앱제작-준비

17. 앱제작-준비

1. 시작파일

파일다운로드 파일활용방법 만약 이전 파일이 없을 경우 아래의 파일을 다운로드 하여 진행한다 시작 파일

#2. App 컴포넌트 비우기

  1. ./src/App.js 컴포넌트를 깨끗하게 정리하자. App.js
function App() {
 return <div className='App'></div>;
}

export default App;

1 2 3 4 5

  1. index.js 수정 index.js
import React from 'react';
import ReactDOM from 'reactdom/client';
import './index.css';
import App from './App';

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
 <>
 	<App />
 </>
);

1 2 3 4 5 6 7 8 9 10 11

#3. 데이터 로딩 상태 표시해주기

  1. loading 여부에 따라 App 컴포넌트에 그려야할 내용이 변경되므로 useState Hook을 활용한다 App.js
import { useState } from 'react';
function App() {
	const [loading, setLoading] = useState(true);
	return <div className='App'></div>;
}

export default App;

1 2 3 4 5 6 7

#4. 조건부렌더링

  1. loading 변수의 값이 true 일경우 app 컴포넌트에 로딩중입니다를 렌더링한다 App.js
import { useState } from 'react';
function App() {
	const [loading, setLoading] = useState(true);
	return <div className='App'>{loading && <h1>로딩중입니다...</h1>}</div>;
}
export default App;

1 2 3 4 5 6

  • loading 의 값이 true 이므로 로딩중입니다 렌더링된다

#5. 로딩 구현하기

  1. useEffect 훅을 사용하여 0.5초 후 loading 변수의 값을 변경하여 컴포넌트의 내용을 리렌더시킨다. 이제 0.5초후 앱의 타이틀이 출력된다. App.js
import { useState, useEffect } from 'react';
function App() {
	const [loading, setLoading] = useState(true);
	useEffect(() => {
		setTimeout(() => {
			setLoading(false);
		}, 500);
	}, []);
	return <div className='App'>{loading ? <h1>로딩중입니다...</h1> : <h1> 도레미레시피</h1>}</div>;
}
export default App;

1 2 3 4 5 6 7 8 9 10 11

#6. 데이터를 어디에 저장할까?

  1. useEffect() 훅에 주석을 작성해보자. 바로 그 자리에 레시피 데이터를 로딩할 것이다.
```js # App.js

function App() \{
	const [loading, setLoading] = useState(true);
	useEffect(() => \{
		//레시피데이터로딩
		setTimeout(() => \{
			setLoading(false);
		\}, 500);
	\}, []);
	return <div className='App'>\{loading ? `<h1>`로딩중입니다...`</h1>` : `<h1>` 도레미레시피`</h1>`\}`</div>`;
\}
export default App;

1. 로딩된 데이터는 state에 저장한다
  레시피데이터를 로딩한 다음 state에 저장하려면 어떻게 해야 할까?
  로딩된 레시피 데이터를 저장할 수 있도록 data 만들자. 자료형은 당연히 배열이고, 배열내 객체로 데이터가 들어올 것이다.
  App.js

```javascript
import { useState, useEffect } from 'react';
function App() {
	const [loading, setLoading] = useState({ state: true, data: [] });
	console.log(loading);
	useEffect(() => {
		//레시피데이터로딩
		setTimeout(() => {
			setLoading(false);
		}, 500);
	}, []);
	return <div className='App'>{loading ? <h1>로딩중입니다...</h1> : <h1> 도레미레시피</h1>}</div>;
}

export default App;

1 2 3 4 5 6 7 8 9 10 11 12 13 14

#7. 여기까지 깃허브에 올리기

bash

git add .
git commit m "06 프로젝트 워밍업"
git push origin main

1 2 3

#8. 완료파일

완료 파일

목차

  • **1. 시작파일**
  • [**#**](https://qwerewqwerew.github.io/retype-react/%EB%A0%88%EC%8B%9C%ED%94%BC%EC%95%B1/6/#2-app-%EC%BB%B4%ED%8F%AC%EB%84%8C%ED%8A%B8-%EB%B9%84%EC%9A%B0%EA%B8%B0)**2. App 컴포넌트 비우기**
  • [**#**](https://qwerewqwerew.github.io/retype-react/%EB%A0%88%EC%8B%9C%ED%94%BC%EC%95%B1/6/#3-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%A1%9C%EB%94%A9-%EC%83%81%ED%83%9C-%ED%91%9C%EC%8B%9C%ED%95%B4%EC%A3%BC%EA%B8%B0)**3. 데이터 로딩 상태 표시해주기**
  • [**#**](https://qwerewqwerew.github.io/retype-react/%EB%A0%88%EC%8B%9C%ED%94%BC%EC%95%B1/6/#4-%EC%A1%B0%EA%B1%B4%EB%B6%80%EB%A0%8C%EB%8D%94%EB%A7%81)**4. 조건부렌더링**
  • [**#**](https://qwerewqwerew.github.io/retype-react/%EB%A0%88%EC%8B%9C%ED%94%BC%EC%95%B1/6/#5-%EB%A1%9C%EB%94%A9-%EA%B5%AC%ED%98%84%ED%95%98%EA%B8%B0)**5. 로딩 구현하기**
  • [**#**](https://qwerewqwerew.github.io/retype-react/%EB%A0%88%EC%8B%9C%ED%94%BC%EC%95%B1/6/#6-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%A5%BC-%EC%96%B4%EB%94%94%EC%97%90-%EC%A0%80%EC%9E%A5%ED%95%A0%EA%B9%8C)**6. 데이터를 어디에 저장할까?**
  • [**#**](https://qwerewqwerew.github.io/retype-react/%EB%A0%88%EC%8B%9C%ED%94%BC%EC%95%B1/6/#7-%EC%97%AC%EA%B8%B0%EA%B9%8C%EC%A7%80-%EA%B9%83%ED%97%88%EB%B8%8C%EC%97%90-%EC%98%AC%EB%A6%AC%EA%B8%B0)**7. 여기까지 깃허브에 올리기**
  • [**#**](https://qwerewqwerew.github.io/retype-react/%EB%A0%88%EC%8B%9C%ED%94%BC%EC%95%B1/6/#8-%EC%99%84%EB%A3%8C%ED%8C%8C%EC%9D%BC)**8. 완료파일**