React
Meta(FaceBook)์์ ๊ฐ๋ฐํ JavaScript ๊ธฐ๋ฐ UI ๊ฐ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
React๋ ํ์ด์ค๋ถ์์ ๊ฐ๋ฐํ JavaScript ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก, ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค๊ธฐ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์
๋๋ค. React๋ ์ฌ์ฉ์ ์ธํฐํ์ด์ค์ ๊ตฌ์ถ๊ณผ ๊ด๋ฆฌ๋ฅผ ๋์์ฃผ๋ ์ ์ธ์ ์ด๊ณ ํจ์จ์ ์ธ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. React๋ ๋จ์ผ ํ์ด์ง ์ ํ๋ฆฌ์ผ์ด์
(SPA) ๋ฐ ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์
์์ ํนํ ๋ฐ์ด๋ ์ฑ๋ฅ์ ๋ณด์ด๋ฉฐ, ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ์ํคํ
์ฒ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๊ณ ์์ต๋๋ค.
React๋ 2011๋
์ ํ์ด์ค๋ถ์์ ์ฒ์์ผ๋ก ๋์
๋์๊ณ , 2013๋
์ ์คํ์์ค๋ก ๊ณต๊ฐ๋์์ต๋๋ค. ๊ทธ ์ดํ๋ก๋ React ์ปค๋ฎค๋ํฐ๋ ๊ณ์ ์ฑ์ฅํ๊ณ ๋ฐ์ ํ๋ฉฐ, ๋ง์ ๊ฐ๋ฐ์๋ค์ด ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ํ๋์ ์ด๊ณ ํจ์จ์ ์ธ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ๊ตฌ์ถํ๊ณ ์์ต๋๋ค.
React ์ฐฝ์์
React๋ ํ์ด์ค๋ถ์์ ๊ฐ๋ฐ๋์์ผ๋ฉฐ, React๋ฅผ ๋ง๋ ํ ์ค ์ฃผ์ํ ์ธ๋ฌผ ์ค ํ ๋ช
์ Jordan Walke์
๋๋ค. Jordan Walke๋ React๋ฅผ ์ด๊ธฐ์ ๊ฐ๋ฐํ๊ณ ๊ทธ ์์ด๋์ด๋ฅผ ๊ตฌ์ํ ์ฃผ์ ๊ฐ๋ฐ์ ์ค ํ๋๋ก ์๋ ค์ ธ ์์ต๋๋ค.
Jordan Walke๋ React์ ์ด๊ธฐ ๋ฒ์ ์ ๋ง๋ค๋ฉด์ JSX(JavaScript XML) ๋ฌธ๋ฒ์ ๋์
ํ๊ณ , React์ ํต์ฌ ๊ฐ๋
์ค ํ๋์ธ ๊ฐ์ DOM(Virtual DOM)์ ๋์
ํ๋ ๋ฑ์ ๊ธฐ์ ์ ์ธ ๊ฒฐ์ ์ ๋ด๋ฆฐ ์ธ๋ฌผ ์ค ํ๋๋ก ์๋ ค์ ธ ์์ต๋๋ค.
React ํต์ฌ ๊ฐ๋
React ๋ ๊ฐ์ DOM(Virtual DOM)์ ์ฌ์ฉํ์ฌ ์์ฑ(attribute) ๋๋ ์ํ(state)์ ๋ณํ์ ๋ฐ์ํ์ฌ UI๋ฅผ ์
๋ฐ์ดํธํ๋ ๊ตฌ์กฐ์ด๋ค.
Reconciliation (์ฌ์กฐ์ )
1.
๊ฐ์ DOM ์์ฑ
: ์ํ๋ ์์ฑ์ด ๋ณ๊ฒฝ๋๋ฉด React๋ ์ปดํฌ๋ํธ์ ์๋ก์ด ๊ฐ์ DOM์ ์์ฑํฉ๋๋ค. ์ด ๊ฐ์ DOM์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ฐ์ํ ์ปดํฌ๋ํธ์ ํธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋๋ค.
2.
์ด์ ๊ฐ์ DOM๊ณผ ๋น๊ต
: ์๋ก์ด ๊ฐ์ DOM์ ์ด์ ๊ฐ์ DOM๊ณผ ๋น๊ต๋ฉ๋๋ค. ์ด ๋น๊ต๋ฅผ ํตํด ๋ณ๊ฒฝ๋ ๋ถ๋ถ์ด ์๋ณ๋๊ณ , ์ค์ DOM์ ์ ์ฉํด์ผ ํ ์ต์ํ์ ์
๋ฐ์ดํธ๊ฐ ๊ฒฐ์ ๋ฉ๋๋ค.
3.
์ค์ DOM ์
๋ฐ์ดํธ
: ๋ณ๊ฒฝ๋ ๋ถ๋ถ์ด ์๋ณ๋๋ฉด React๋ ์ด๋ฅผ ๋ฐํ์ผ๋ก ์ค์ DOM์ ์
๋ฐ์ดํธํฉ๋๋ค. ์ด๋ ์ต์ํ์ ์กฐ์๋ง์ด ์ด๋ฃจ์ด์ง๋ฏ๋ก ์ฑ๋ฅ์ด ํฅ์๋ฉ๋๋ค.
1. ๊ฐ์ DOM ์์ฑ
2. ์ด์ ๊ฐ์ DOM๊ณผ ๋น๊ต
3. ์ค์ DOM ์ ๋ฐ์ดํธ
์๊ฐํด๋ณด๊ธฐ
์ํ ๋ณ๊ฒฝ์ ๊ฐ์งํด์ ๋ชจ๋ ๊ตฌ์กฐ๋ฅผ ๋ค์ ์์ฑํ๋ ๊ฒ์ด ๋น ๋ฅผ๊น?
๋ณ๊ฒฝ๋ ๋ถ๋ถ๋ง ์
๋ฐ์ดํธํ๋ ๊ฒ์ด ๋น ๋ฅผ๊น?
Reconciliation (์ฌ์กฐ์ )์ ํตํด React๋ ํจ์จ์ ์ผ๋ก UI๋ฅผ ์
๋ฐ์ดํธํ๊ณ ์ฑ๋ฅ์ ์ต์ ํํ ์ ์์ต๋๋ค. ์ด๋ React์ ์ฑ๋ฅ ํน์ง ์ค ํ๋๋ก, ํ๋ฉด ์ ์ฒด๋ฅผ ๋ค์ ๊ทธ๋ฆฌ๋ ๊ฒ์ด ์๋๋ผ ๋ณ๊ฒฝ๋ ๋ถ๋ถ๋ง์ ๊ฐ์งํ์ฌ ์
๋ฐ์ดํธํ๋ฏ๋ก์จ ๋น ๋ฅธ ํ๋ฉด ๊ฐฑ์ ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
์ฃผ์ ๊ฐ๋
1.
์ปดํฌ๋ํธ ๊ธฐ๋ฐ
: React ์ ํ๋ฆฌ์ผ์ด์
์ ์๊ณ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ปดํฌ๋ํธ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ๊ฐ ์ปดํฌ๋ํธ๋ ์์ฒด์ ์ผ๋ก ์ํ(state)๋ฅผ ๊ฐ์ง ์ ์์ผ๋ฉฐ, ์ด๋ฌํ ์ปดํฌ๋ํธ๋ฅผ ์กฐํฉํ์ฌ ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์
์ ๊ตฌ์ถํฉ๋๋ค.
2.
๊ฐ์ DOM (Virtual DOM)
: React๋ ๊ฐ์ DOM์ ์ฌ์ฉํ์ฌ ๋ธ๋ผ์ฐ์ ์ ๋ ๋๋ง๋๊ธฐ ์ ์ ๊ฐ์์ผ๋ก ๋ชจ๋ ๋ณ๊ฒฝ ์ฌํญ์ ์ฒ๋ฆฌํฉ๋๋ค. ์ด๋ฅผ ํตํด ํจ์จ์ ์ผ๋ก ํ๋ฉด์ ๊ฐฑ์ ํ๊ณ ์ฑ๋ฅ์ ์ต์ ํํ ์ ์์ต๋๋ค.
3.
JSX (JavaScript XML)
: React์์๋ JSX๋ผ๋ ๋ฌธ๋ฒ์ ์ฌ์ฉํ์ฌ JavaScript ์ฝ๋ ์์์ XML๊ณผ ์ ์ฌํ ๋ฌธ๋ฒ์ผ๋ก UI๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. JSX๋ ๊ฐ๊ฒฐํ๊ณ ๊ฐ๋
์ฑ์ด ๋์ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋๋ก ๋์์ค๋๋ค.
4.
๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ
: React๋ ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ์ง์ํ์ฌ ๋ฐ์ดํฐ์ ํ๋ฆ์ด ๋จ์ผ ๋ฐฉํฅ์ผ๋ก ์ ์ง๋ฉ๋๋ค. ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์์ ์ปดํฌ๋ํธ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ ์ ์์ผ๋, ๊ทธ ๋ฐ๋๋ ์๋์ผ๋ก ์ด๋ฃจ์ด์ง์ง ์์ต๋๋ค.
5.
์ํ ๊ด๋ฆฌ
: React ์ ํ๋ฆฌ์ผ์ด์
์์๋ ์ปดํฌ๋ํธ์ ์ํ๋ฅผ ํตํด ๋์ ์ธ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ์ ์์ต๋๋ค. ์ํ๋ ์ปดํฌ๋ํธ ๋ด์์ ๋ณ๊ฒฝ ๊ฐ๋ฅํ๋ฉฐ, ์ํ์ ๋ณํ์ ๋ฐ๋ผ ์๋์ผ๋ก ํ๋ฉด์ด ๊ฐฑ์ ๋ฉ๋๋ค.
6.
๋ผ์ฐํ
: React๋ ๋ผ์ฐํฐ๋ฅผ ํตํด ๋ค์ํ ํ์ด์ง ๊ฐ์ ์ ํ์ด๋ SPA์์์ ๋ผ์ฐํ
์ ์ฝ๊ฒ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. React Router๋ React ์ ํ๋ฆฌ์ผ์ด์
์์ ๋ผ์ฐํ
์ ๊ตฌํํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๋๋ฆฌ ์ฌ์ฉ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค ํ๋์
๋๋ค.
์ฃผ์ ํ์ต ์์
1.
JSX
2.
์ปดํฌ๋ํธ
3.
Props
4.
State
5.
๋ผ์ดํ์ฌ์ดํด(์๋ช
์ฃผ๊ธฐ)
6.
Hooks
7.
์ด๋ฒคํธ ํธ๋ค๋ง
8.
์กฐ๊ฑด๋ถ ๋ ๋๋ง
JSX (JavaScript XML)
โข
JSX๋ JavaScript์ ํ์ฅ ๋ฌธ๋ฒ์ผ๋ก, JavaScript ์ฝ๋ ์์์ XML ํ์์ ๋งํฌ์
์ ์์ฑํ ์ ์๊ฒ ํฉ๋๋ค.
โข
React์์ ์ปดํฌ๋ํธ์ UI๋ฅผ ์ ์ํ๋ ๋ฐ ์ฃผ๋ก ์ฌ์ฉ๋๋ฉฐ, ๊ฐ๋
์ฑ์ด ๋๊ณ ์ฝ๋ ์์ฑ์ด ํธ๋ฆฌํ๋๋ก ๋์์ค๋๋ค.
const element = <h1>Hello, World!</h1>;
JavaScript
๋ณต์ฌ
์ปดํฌ๋ํธ
โข
์ปดํฌ๋ํธ๋ UI๋ฅผ ๋
๋ฆฝ์ ์ด๊ณ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๋ถ๋ถ์ผ๋ก ๋๋๋ ๊ฐ๋
์
๋๋ค.
โข
React ์ ํ๋ฆฌ์ผ์ด์
์ ์ฌ๋ฌ ์ปดํฌ๋ํธ๋ค์ด ์กฐํฉ๋์ด ์ ์ฒด UI๋ฅผ ํ์ฑํฉ๋๋ค.
function Welcome(props) {
return <h1>Hello, {props.name}</h1>;
}
JavaScript
๋ณต์ฌ
Props (์์ฑ)
โข
Props๋ ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์์ ์ปดํฌ๋ํธ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๋งค๊ฐ๋ณ์์
๋๋ค.
โข
์ปดํฌ๋ํธ๋ props๋ฅผ ํตํด ๋ถ๋ชจ๋ก๋ถํฐ ์ ๋ฌ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
<Welcome name="John" />
JavaScript
๋ณต์ฌ
State (์ํ)
โข
State๋ ์ปดํฌ๋ํธ๊ฐ ์์ฒด์ ์ผ๋ก ์ ์งํ๊ณ ๊ด๋ฆฌํ๋ ๋ฐ์ดํฐ์
๋๋ค.
โข
์ํ๊ฐ ๋ณ๊ฒฝ๋๋ฉด React๋ ์ปดํฌ๋ํธ๋ฅผ ๋ฆฌ๋ ๋๋งํ๊ณ ๋ณ๊ฒฝ๋ ์ํ๋ฅผ ๋ฐ์ํฉ๋๋ค.
class Counter extends React.Component {
constructor(props) {
super(props);
this.state = { count: 0 };
}
// ...
}
JavaScript
๋ณต์ฌ
๋ผ์ดํ์ฌ์ดํด(์๋ช ์ฃผ๊ธฐ)
โข
์ปดํฌ๋ํธ๊ฐ ์์ฑ, ๊ฐฑ์ , ์ ๊ฑฐ๋๋ ๊ณผ์ ์ ๋ผ์ดํ์ฌ์ดํด์ด๋ผ๊ณ ํฉ๋๋ค.
โข
์ฃผ์ ๋จ๊ณ์ ๋ฐ๋ผ ๋ผ์ดํ์ฌ์ดํด ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์์
์ ์ํํ ์ ์์ต๋๋ค.
class ExampleComponent extends React.Component {
componentDidMount() {
// ์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ๋ ํ ์คํ๋๋ ์ฝ๋
}
// ...
}
JavaScript
๋ณต์ฌ
Hooks
โข
Hooks๋ ํจ์ ์ปดํฌ๋ํธ์์ ์ํ์ ์๋ช
์ฃผ๊ธฐ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๊ฒ ํด์ฃผ๋ ํจ์์
๋๋ค.
โข
useState, useEffect ๋ฑ์ด ๋๋ฆฌ ์ฌ์ฉ๋๋ฉฐ, ํจ์ํ ์ปดํฌ๋ํธ์์ ์ํ์ ๋ผ์ดํ์ฌ์ดํด ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๊ฒ ํฉ๋๋ค.
import React, { useState, useEffect } from 'react';
function ExampleComponent() {
const [count, setCount] = useState(0);
useEffect(() => {
// ์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ ๋๋ ๊ฐฑ์ ๋ ํ ์คํ๋๋ ์ฝ๋
}, [count]);
// ...
}
JavaScript
๋ณต์ฌ
์ด๋ฒคํธ ํธ๋ค๋ง
โข
React์์๋ ์ด๋ฒคํธ ํธ๋ค๋ง์ด ์ผ๋ฐ์ ์ธ HTML๊ณผ ์ ์ฌํ์ง๋ง, camelCase ํ๊ธฐ๋ฒ์ ์ฌ์ฉํฉ๋๋ค.
โข
ํธ๋ค๋ฌ ํจ์๋ฅผ ๋ง๋ค๊ณ JSX์์ ์ด๋ฒคํธ์ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค.
function handleClick() {
alert('Button Clicked!');
}
<button onClick={handleClick}>Click me</button>
JavaScript
๋ณต์ฌ
์กฐ๊ฑด๋ถ ๋ ๋๋ง
โข
JSX์์ ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ค๋ฅธ ์ปดํฌ๋ํธ๋ ์๋ฆฌ๋จผํธ๋ฅผ ๋ ๋๋งํ ์ ์์ต๋๋ค.
โข
์ผํญ ์ฐ์ฐ์๋ && ์ฐ์ฐ์ ๋ฑ์ ์ฌ์ฉํ์ฌ ์กฐ๊ฑด๋ถ ๋ ๋๋ง์ ๊ตฌํํ ์ ์์ต๋๋ค.
function Greeting({ isLoggedIn }) {
return isLoggedIn ? <UserGreeting /> : <GuestGreeting />;
}
JavaScript
๋ณต์ฌ
React & React Native
๋ ๊ธฐ์ ๋ชจ๋ Facebook์์ ๊ฐ๋ฐ๋์์ผ๋ฉฐ, React์์ ์ฌ์ฉ๋๋ ๊ธฐ์ ๊ณผ ๊ฐ๋
์ ๊ณต์ ํฉ๋๋ค. React Native๋ React๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ฌ JavaScript ๋ฐ React๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ดํฐ๋ธ ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ง๋ค ์ ์๋๋ก ํ๋ ๊ฒ์ด ์ฃผ์ ๋ชฉํ์
๋๋ค. ์ด๋ฌํ ์ ์ฌ์ฑ์ผ๋ก ์ธํด React๋ก ์์ฑ๋ ์น ์ ํ๋ฆฌ์ผ์ด์
๊ณผ React Native๋ก ์์ฑ๋ ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์
๊ฐ์ ์ฝ๋ ์ฌ์ฌ์ฉ์ด ์ผ๋ถ ๊ฐ๋ฅํฉ๋๋ค.
React
์น ์ ํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
โข
์น ์ ํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ์ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ: React๋ ์ฃผ๋ก ์น ์ ํ๋ฆฌ์ผ์ด์
์ ๊ฐ๋ฐํ๊ธฐ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
โข
์ปดํฌ๋ํธ ๊ธฐ๋ฐ ์ํคํ
์ฒ: React๋ ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ์ํคํ
์ฒ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ค. ์ด๋ UI๋ฅผ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ๊ณ ๋
๋ฆฝ์ ์ธ ์กฐ๊ฐ์ผ๋ก ๋๋์ด ๊ฐ๋ฐํ๋๋ฐ ๋์์ ์ค๋ค.
React๋ก ๊ฐ๋ฐํ ์น์ฌ์ดํธ : Facebook, Instagram
React Native
๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
โข
๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์
๊ฐ๋ฐ์ ์ํ ํ๋ ์์ํฌ: React Native๋ React์ ํ์ฅ์ผ๋ก, ์ฃผ๋ก iOS ๋ฐ Android ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ฐ๋ฐํ๊ธฐ ์ํ ํ๋ ์์ํฌ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
โข
๋ค์ดํฐ๋ธ ๋ชจ๋ฐ์ผ ์ฑ ๊ฐ๋ฐ: React Native๋ JavaScript์ React๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ดํฐ๋ธ(์๋์ ํ๋ซํผ์์ ์คํ๋๋) ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์
์ ๋ง๋ค ์ ์๋๋ก ์ง์ํฉ๋๋ค.
โข
์ปดํฌ๋ํธ ๊ธฐ๋ฐ ์ํคํ
์ฒ์ ํ์ฅ: React Native๋ React์ฒ๋ผ ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ์ํคํ
์ฒ๋ฅผ ์ฌ์ฉํ๋ฉฐ, React์์ ์ฌ์ฉํ๋ ๊ฒ๊ณผ ์ ์ฌํ ๊ฐ๋
๊ณผ API๋ฅผ ์ ๊ณตํฉ๋๋ค.
React Native ๋ก ๊ฐ๋ฐํ ์ฑ : Facebook, Instagram
React ์ฌ์ฉ ์ vs ์ฌ์ฉ ํ
React ์ฌ์ฉ ํ์ง ์๋ HTML ์ฝ๋
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Styled Alert Example</title>
<style>
/* ์คํ์ผ ์ถ๊ฐ */
.styled-alert {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
padding: 20px;
background-color: #f1f1f1;
border: 1px solid #ccc;
border-radius: 5px;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
}
</style>
</head>
<body>
<button id="myButton">Click me</button>
<script>
// ๋ฒํผ ์์๋ฅผ ๊ฐ์ ธ์ค๊ธฐ
var myButton = document.getElementById("myButton");
// ๋ฒํผ์ ํด๋ฆญ ์ด๋ฒคํธ ๋ฆฌ์ค๋ ์ถ๊ฐ
myButton.addEventListener("click", function() {
// ์คํ์ผ๋ง๋ alert๋ฅผ ํ์ํ๊ธฐ ์ํ div ์์ ์์ฑ
var styledAlert = document.createElement("div");
styledAlert.className = "styled-alert";
styledAlert.textContent = "๋ฒํผ์ด ํด๋ฆญ๋์์ต๋๋ค!";
// body์ ์ถ๊ฐ
document.body.appendChild(styledAlert);
// 2์ด ํ์ alert๋ฅผ ์ญ์
setTimeout(function() {
document.body.removeChild(styledAlert);
}, 2000);
});
</script>
</body>
</html>
JavaScript
๋ณต์ฌ
React ๋ก ๊ฐ๋ฐํ ์ฝ๋
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>React Styled Alert</title>
<!-- React ๋ฐ ReactDOM CDN ์ถ๊ฐ -->
<script crossorigin src="https://unpkg.com/react@17/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@17/umd/react-dom.development.js"></script>
<!-- Babel ์ฌ์ฉ์ ์ํ CDN ์ถ๊ฐ -->
<script crossorigin src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
<style>
/* ์คํ์ผ ์ถ๊ฐ */
.styled-alert {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
padding: 20px;
background-color: #f1f1f1;
border: 1px solid #ccc;
border-radius: 5px;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
}
</style>
</head>
<body>
<div id="root"></div>
<script type="text/babel">
// React ์ปดํฌ๋ํธ ์ ์
const { useState } = React;
function App() {
// showAlert ์ํ์ ํด๋น ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ํจ์๋ฅผ useState ํ
์ ํตํด ์์ฑ
const [showAlert, setShowAlert] = useState(false);
// handleClick ํจ์ ์ ์: ๋ฒํผ ํด๋ฆญ ์ showAlert ์ํ๋ฅผ ํ ๊ธํ๊ณ , 2์ด ํ์ ๋ค์ false๋ก ๋ณ๊ฒฝํ์ฌ alert๋ฅผ ์ ๊ฑฐ
const handleClick = () => {
// ๋ฒํผ ํด๋ฆญ ์ showAlert ์ํ๋ฅผ ํ ๊ธ
setShowAlert(true);
// 2์ด ํ์ showAlert ์ํ๋ฅผ ๋ค์ false๋ก ๋ณ๊ฒฝํ์ฌ alert๋ฅผ ์ ๊ฑฐ
setTimeout(() => {
setShowAlert(false);
}, 2000);
};
// JSX๋ฅผ ์ฌ์ฉํ์ฌ UI๋ฅผ ๋ฐํ
return (
<div>
{/* ๋ฒํผ ์๋ฆฌ๋จผํธ: ํด๋ฆญ ์ handleClick ํจ์ ์คํ */}
<button onClick={handleClick}>Click me</button>
{/* showAlert๊ฐ true์ผ ๋๋ง ๋ ๋๋ง๋๋ ์กฐ๊ฑด๋ถ ๋ ๋๋ง */}
{showAlert && (
<div className="styled-alert">
๋ฒํผ์ด ํด๋ฆญ๋์์ต๋๋ค!
</div>
)}
</div>
);
}
// React ์ปดํฌ๋ํธ๋ฅผ root ์์์ ๋ ๋๋ง
ReactDOM.render(<App />, document.getElementById('root'));
</script>
</body>
</html>
JavaScript
๋ณต์ฌ
๋ฏธ๋ฆฌ ์์๋๊ธฐ
React๋ฅผ ํ๋ก์ ํธ์ ํฌํจํ๋ ๋ฐฉ์
1.
CDN ๋ฐฉ์
2.
Node.js์ npm ๋ฐฉ์
CDN ๋ฐฉ์
1.
React ๋ฐ ReactDOM CDN ์ถ๊ฐ
2.
Babel์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
3.
React ์ฝ๋ ์์ฑ
React ๋ฐ ReactDOM CDN ์ถ๊ฐ
<!-- React์ ReactDOM CDN ์ถ๊ฐ -->
<script crossorigin src="https://unpkg.com/react@17/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@17/umd/react-dom.development.js"></script>
HTML
๋ณต์ฌ
Babel์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
<!-- Babel์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ Babel CDN ์ถ๊ฐ -->
<script crossorigin src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
HTML
๋ณต์ฌ
React ์ฝ๋ ์์ฑ
<script type="text/babel">
// React ์ฝ๋ ์์ฑ
const element = <h1>Hello, World!</h1>;
ReactDOM.render(element, document.getElementById('root'));
</script>
HTML
๋ณต์ฌ
๋ฐ๋ฒจ()์ด๋?
๋ฐ๋ฒจ(Babel)์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ๋ณํํ๋ ๋๊ตฌ๋ก, ์ฃผ๋ก ์ต์ ECMAScript ํ์ค์ ๋ฐ๋ผ ์์ฑ๋ ์ฝ๋๋ฅผ ์ด์ ๋ฒ์ ์ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๋ณํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
Node.js์ npm ๋ฐฉ์
1.
ํ๋ก์ ํธ ์ด๊ธฐํ
2.
React ๋ฐ ReactDOM ์ค์น
3.
React ์ฝ๋ ์์ฑ
ํ๋ก์ ํธ ์ด๊ธฐํ
npx create-react-app my-react-app
cd my-react-app
Shell
๋ณต์ฌ
React ๋ฐ ReactDOM ์ค์น
npm install react react-dom
Shell
๋ณต์ฌ
React ์ฝ๋ ์์ฑ
import React from 'react';
import ReactDOM from 'react-dom';
const element = <h1>Hello, World!</h1>;
ReactDOM.render(element, document.getElementById('root'));
JavaScript
๋ณต์ฌ