[React] Quick Start :: 80% of React concepts
2023. 9. 12. 13:11ใReact
728x90
๋ฐ์ํ
2023๋ 3์์ ๋ฆฌ๋ด์ผ๋ ๋ฆฌ์กํธ ๊ณต์ ๋ฌธ์์ ์ฒซ๋ฒ์งธ ์ฅ, "Quick Start"์ ๋ด์ฉ์ด๋ค.
๐ You will learn
- ์ปดํฌ๋ํธ ์์ฑ ๋ฐ ์ค์ฒฉ
- ๋งํฌ์ ๊ณผ ์คํ์ผ ์ถ๊ฐ
- ๋ฐ์ดํฐ ํ์
- ์กฐ๊ฑด๋ถ ๋ ๋๋ง๊ณผ ๋ชฉ๋ก ๋ ๋๋ง
- ์ด๋ฒคํธ ์๋ต ๋ฐ ํ๋ฉด ์ ๋ฐ์ดํธ
- ์ปดํฌ๋ํธ ๊ฐ ๋ฐ์ดํฐ ๊ณต์
1. Creating and nesting components
- ๋ฆฌ์กํธ๋ ์ปดํฌ๋ํธ๋ก ๊ตฌ์ฑ๋๋ค.
- ์ปดํฌ๋ํธ๋ ์์ฒด ๋ก์ง๊ณผ ์ธ๊ด์ ๊ฐ์ง UI์ ์ผ๋ถ์ด๋ค.
- ์ปดํฌ๋ํธ๋ ๋ฒํผ๋งํผ ์์ ์๋ ์๊ณ , ํ ํ์ด์ง ์ ์ฒด๋งํผ ํด ์๋ ์๋ค.
- ๋ฆฌ์กํธ ์ปดํฌ๋ํธ๋ ๋งํฌ์ ์ ๋ฆฌํดํ๋ JS ํจ์์ด๋ค.
- ์ปดํฌ๋ํธ์ ์ด๋ฆ์ ๋๋ฌธ์๋ก ์์ํ๋ค.
1-1) ์ปดํฌ๋ํธ ์์ฑ
function MyButton() {
return (
<button>I'm a button</button>
);
}
1-2) ์ปดํฌ๋ํธ ์ค์ฒฉ
export default function MyApp() {
return (
<div>
<h1>Welcome to my app</h1>
<MyButton />
</div>
);
}
2. Writing markup with JSX
- ๋๋ถ๋ถ์ ๋ฆฌ์กํธ ํ๋ก์ ํธ๋ ํธ์์ฑ์ ์ํด JSX๋ฅผ ์ฌ์ฉํ๋ค. (์ ํ์ฌํญ์!)
- JSX๋ HTML๋ณด๋ค ๋ ์๊ฒฉํ๋ค.
- ๋ชจ๋ ํ๊ทธ๋ฅผ ๋ซ์์ค์ผ ํ๋ค.
<br/>
- ์ปดํฌ๋ํธ๋ ์ฌ๋ฌ ๊ฐ์ JSX ํ๊ทธ๋ฅผ ๋ฐํํ ์ ์๊ณ ํ๋์ ๋ถ๋ชจ๋ก ๊ฐ์ธ์ผ ํ๋ค.
<div>...</div>
ํน์<>...</>
- HTML์ JSX๋ก ๋ณํํด์ฃผ๋ converter๋ฅผ ์ฌ์ฉํ ์ ์๋ค. HTML to JSX
3. Adding styles
className
์ผ๋ก CSS ํด๋์ค๋ฅผ ์ง์ ํ๋ค. HTML์class
์ดํธ๋ฆฌ๋ทฐํธ์ ๋์ผํ๊ฒ ์๋ํ๋ค.
<img className="avatar" />
- ๋ณ๋์ CSS ํ์ผ์ CSS ๊ท์น์ ์์ฑํ๋ค.
/* In your CSS */
.avatar {
border-radius: 50%;
}
- CSS ํ์ผ์ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์ ๊ท์ ํ์ง ์๋๋ค. ํ๊ฒฝ์ ๋ฐ๋ผ ์์์ ํ๋ฉด ๋จ!
4. Displaying data
- JSX๋ฅผ ์ฌ์ฉํ๋ฉด JS์ ๋งํฌ์ ์ ๋ฃ์ ์ ์๋ค.
- ์ค๊ดํธ
{}
๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค์ JS๋ก ๋์๊ฐ์ ์ ์ ์๊ฒ ๋ณด์ฌ์ค์ผ ํ ๋ณ์๋ฅผ ์ฝ์ ํ ์ ์๋ค.
return (
<h1>
{user.name}
</h1>
);
- JSX ์์ฑ์์๋ ์ค๊ดํธ
{}
๋ฅผ ์ฌ์ฉํด JS๋ก ๋ค์ ๋์๊ฐ ์ ์๋ค.
return (
<img
className="avatar"
src={user.imageUrl} // ๐ ์ฌ๊ธฐ
alt={'Photo of ' + user.name} // ๐ ์ด๋ฐ ๋ณต์กํ ํํ์๋ ๊ฐ๋ฅ
/>
);
5. Conditional rendering
JS์์ ์ฌ์ฉํ๋
if๋ฌธ
,์ผํญ์ฐ์ฐ์
,logical && ๊ตฌ๋ฌธ
์ ์ฌ์ฉํ์ฌ ์กฐ๊ฑด๋ถ๋ก JSX๋ฅผ ํฌํจํ ์ ์๋ค.if๋ฌธ
let content;
if (isLoggedIn) {
content = <AdminPanel />;
} else {
content = <LoginForm />;
}
return (
<div>
{content}
</div>
);
์ผํญ์ฐ์ฐ์
<div>
{isLoggedIn ? (
<AdminPanel />
) : (
<LoginForm />
)}
</div>
logical && ๊ตฌ๋ฌธ
<div>
{isLoggedIn && <AdminPanel />}
</div>
6. Rendering lists
- JS์
for ๋ฐ๋ณต๋ฌธ
,map()
์ ์ด์ฉํด ๋ชฉ๋ก์ ๋ ๋๋งํ๋ค. - ๋ฌธ์์ด ํน์ ์ซ์๋ก ๋ (ํ์ ์ฌ์ด์์) ๊ณ ์ ํ
key
์์ฑ์ ์ ๊ณตํด์ผ ํ๋ค.- ์ผ๋ฐ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ID ๊ฐ์ data์์ ๊ฐ์ ธ์จ ๊ฐ์ ์ฌ์ฉํ๋ค.
- ์ฝ์ , ์ญ์ , ์ฌ์ ๋ ฌ์ ํ ๋ ๋ฆฌ์กํธ๊ฐ ํค๋ฅผ ์ฌ์ฉํ๋ค.
const products = [
{ title: 'Cabbage', id: 1 },
{ title: 'Garlic', id: 2 },
{ title: 'Apple', id: 3 },
];
const listItems = products.map(product =>
<li key={product.id}>
{product.title}
</li>
);
return (
<ul>{listItems}</ul>
);
7. Responding to events
- ์ปดํฌ๋ํธ ๋ด๋ถ์ ์ด๋ฒคํธ ํธ๋ค๋ฌ ํจ์๋ฅผ ์ ์ธํด ์ด๋ฒคํธ์ ์๋ตํ ์ ์๋ค.
- ํจ์๋ฅผ ํธ์ถํ์ง ์๊ณ ์ ๋ฌ๋ง ํ๋ฉด ๋๋ค! (ํจ์๋ช
๋ค์
()
๋ถ์ด์ง ๋ง๋ ์๋ฆฌ)
- ํจ์๋ฅผ ํธ์ถํ์ง ์๊ณ ์ ๋ฌ๋ง ํ๋ฉด ๋๋ค! (ํจ์๋ช
๋ค์
function MyButton() {
function handleClick() {
alert('You clicked me!');
}
return (
<button onClick={handleClick}>
Click me
</button>
);
}
8. State : Updating the screen
- ์ปดํฌ๋ํธ๊ฐ ์ผ๋ถ ์ ๋ณด๋ฅผ ๊ธฐ์ตํ๊ณ ํ์ํ๊ธธ ์ํ ๊ฒฝ์ฐ, state๋ฅผ ์ฌ์ฉํ๋ค.
useState
๋ฅผ React import ๋ฐ๊ณ , ์ปดํฌ๋ํธ ๋ด๋ถ์์ state ๋ณ์๋ฅผ ์ ์ธํ๋ค.- ํ์ฌ state์ ์ด๋ฅผ ์ ๋ฐ์ดํธํ๋ ํจ์๋ฅผ ์ป์ ์ ์๋ค.
- ์ด๋ฆ์ ๋ง์๋๋ก ๋ถ์ฌ๋ ๋์ง๋ง, ์ปจ๋ฒค์
์ ๐
[something, setSomething]
import { useState } from 'react';
function MyButton() {
const [count, setCount] = useState(0);
// ...
9. Using Hooks
use
๋ก ์์ํ๋ ํจ์๋ฅผ Hooks์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.- useState๋ฅผ ๋น๋กฏํ built-in Hooks์ด ์๋ค.
- ๊ธฐ์กด์ Hooks๋ฅผ ์กฐํฉํ์ฌ custom hook์ ๋ง๋ค ์๋ ์๋ค.
9-1. Hooks์ ์ ํ์ฌํญ
- Hook์ ์ผ๋ฐ ํจ์๋ณด๋ค ๋ ์ ํ์ ์ด๋ค.
- ์ปดํฌ๋ํธ ํน์ ๋๋ค๋ฅธ ํ ์ ์ต์์ ๋ ๋ฒจ์์๋ง ํ ์ ํธ์ถํ ์ ์๋ค.
- ์กฐ๊ฑด๋ฌธ์ด๋ ๋ฐ๋ณต๋ฌธ์์
useState
๋ฅผ ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด, ์ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค๊ณ ๊ฑฐ๊ธฐ์ ์์ฑํด์ผ ํ๋ค.
10. Props, lifting state up : Sharing data between components
- ์ปดํฌ๋ํธ ๊ฐ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ๊ณ ํจ๊ป ์ ๋ฐ์ดํธํ๊ฒ ํ๊ธฐ ์ํด์๋ ํด๋น ์ปดํฌ๋ํธ๋ค์ ํฌํจํ๊ณ ์๋ ๊ฐ์ฅ ๊ฐ๊น์ด ์ปดํฌ๋ํธ๋ก state๋ฅผ ์ด๋ํด์ผ ํ๋ค.
- JSX ์ค๊ดํธ๋ฅผ ์ด์ฉํด ์ปดํฌ๋ํธ์ ์ ๋ณด๋ฅผ ์ ๋ฌํ ์ ์๋ค.
- ์ด๋ ๊ฒ ์ ๋ฌํ ์ ๋ณด๋ค์ props๋ผ๊ณ ๋ถ๋ฅธ๋ค.
- ์ด ๋ฐฉ์์ lifting state up (state ๋์ด์ฌ๋ฆฌ๊ธฐ)๋ผ๊ณ ํ๋ค.
// ๋ถ๋ชจ ์ปดํฌ๋ํธ
export default function MyApp() {
const [count, setCount] = useState(0);
function handleClick() {
setCount(count + 1);
}
return (
<div>
<h1>Counters that update together</h1>
<MyButton count={count} onClick={handleClick} />
<MyButton count={count} onClick={handleClick} />
</div>
);
}
// ์์ ์ปดํฌ๋ํธ
function MyButton({ count, onClick }) {
return (
<button onClick={onClick}>
Clicked {count} times
</button>
);
}
728x90
๋ฐ์ํ
'React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] Class Component (0) | 2023.10.02 |
---|---|
[React] Describing the UI (2) | 2023.09.27 |
[React-Native] React-Navigation :: ํ๋ฉด ์ ํํ๊ธฐ (0) | 2022.11.03 |