react ์ฌ์ฉ์ด์
React?๐
JSX?
์์ ์ฝ๋๋ JS๋ HTML๋ ์๋ javascript syntax extension๋ผ๊ณ ํ๋ JS์ ํ์ฅ๋ฒ์ ์ด๋ค.
.js ํ์ผ์์ ์ฌ์ฉํ ์ ์๊ณ ๋ณ๋์ ์ปดํ์ผ ๊ณผ์ ์ ๊ฑฐ์ณ์ผ์ง๋ง js๋ฌธ๋ฒ์ผ๋ก ๋ณํํ์ฌ ๋ธ๋ผ์ฐ์ ๊ฐ ์ธ์ํ ์ ์๋ค.
JSX๋ ์ด๋ค ํ๊ทธ๋ผ๋ self closing tag๊ฐ ๊ฐ๋ฅํจ. ex) div /div => div /
์๊ดํธ๋ก ๊ฐ์ธ์ฃผ๊ณ ๋ฌด์กฐ๊ฑด ํ๋์ ํ๊ทธ์์ ์ค์ฒฉ์์๋ฅผ ๋ด์์ฃผ์ด์ผํ๋ค.
ReactDOM.render(<h1>Hello, world!</h1>, document.getElementById("root"));
DOM node์ ์ถ๊ฐ๋์ด ํ๋ฉด์ ๋๋๋ง๋๋ ค๋ฉด ์์๊ฐ์ด ์์ฑํด์ค๋ค. JS์ appendchild ๋๋์ธ๊ฒ ๊ฐ๋ค.
Component์ Props
component(์ปดํฌ๋ํธ)๋ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ UI ๋จ์์ด๋ค. ( ํจ์๋ ๋น์ทํ๋ค๊ณ ์๊ฐํ๋ฉด ํธํจ )
์ด๋ฌํ component(์ปดํฌ๋ํธ)์ ๋งค๊ฐ๋ณ์ ์ญํ ์ ํ๋๊ฒ์ Props๋ผ๊ณ ํ๋ค.
function Welcome(props) {
return <h1>Hello, {props.name}!</h1>;
}
// 2. App ์ปดํฌ๋ํธ ์ ์
function App() {
return (
<div>
<Welcome name="wecoder" />
<Welcome name="John" />
<Welcome name="Sara" />
</div>
);
}
ReactDOM.render(<App />, document.getElementById("root"));
Welcome์ด๋ผ๋ ์ปดํฌ๋ํธ๋ฅผ App์ด๋ผ๋ ์ปดํฌ๋ํธ์์ ์ฌ์ฉํ๋ ์์์ด๋ค. ์ด๋ ๊ฒ๋๋ฉด App์ ๋ถ๋ชจ Welcomde์ ์์์ด๋ผ๋ ๊ด๊ณ๊ฐ ํ์ฑ๋๋ค.
Component์ State
props์ ๋ค๋ฅธ์ ์ด์๋ค๋ฉด props๋ ๋ถ๋ชจ์๊ฒ์ ๋ฐ์์ผ๋ง ์ฌ์ฉํ ์ ์๋ค๋ฉด state๋ ์ปดํฌ๋ํธ ๋ด์์๋ ์ ์ํ๊ณ ์ฌ์ฉํ ์ ์๋ค.
function Button(props) {
const [isClicked, setIsClicked] = useState(false);
return (
<button className="btn" onClick={() => setIsClicked(!isClicked)}>
{isClicked ? "์ข์์" : "์ซ์ด์"}
</button>
);
}
๋ฒํผ์ ๋๋ฅผ๋๋ง๋ค ๊ฐ์ด ๋ฐ๋๋ ๊ฐ๋จํ ์์.
๋ฆฌ์กํธ๋ฅผ ์ ์ฌ์ฉํ๋๊ฐ?
- ๋ชจ๋ฐ์ผ์ฑ์ผ๋ก ๋ฐํ์ด ์ฝ๋ค.
- ์ฑ ์ฒ๋ผ ๋ฐ์ด๋ UX
- ๊ทธ๋ฅ ์น์ฌ์ดํธ๋ณด๋ค ๋น์ฆ๋์ค์ ์ผ๋ก ๊ฐ์ ์ด์๋ค.
์ ์ด์ ์์ํด๋ณด์.
- node.js๋ฅผ ์ต์ ๋ฒ์ ์ผ๋ก ๊น์์ค๋ค.
- ํด๋๋ฅผ ๋ง๋ค๊ณ vscode๋ก ํจ ํ โก๏ธ ํฐ๋ฏธ๋์ฐฝ์ โnpx create-react-app <ํ๋ก์ ํธ ์ด๋ฆ="">' ์ ์น๋ค.ํ๋ก์ ํธ>
- ํฐ๋ฏธ๋์ โnpm startโ ์ ๋ ฅ ํ ์์ ํ์ด์ง๊ฐ ๋์ค๋์ง ํ์ธ
๊ธฐ์ด ์ค๋ช ๐ฉ
โnode.jsโ๋ฅผ ์ค์นํ ์ด์ โก๏ธ create react app์ ์ฌ์ฉํ๊ธฐ ์ํด -> node.js๋ฅผ ๊น๋ฉด npm์ด๋ผ๋ ํด์ ์ฌ์ฉ๊ฐ๋ฅ
public->index.html (๋ฉ์ธํ์ด์ง ) โก๏ธ โsrc->app.jsโ๋ฅผ ๋์ด๋ค ์ฌ์ฉํ๊ณ ์๋ค.
package.json โก๏ธ ์ค์นํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ชฉ๋ก
node_modules โก๏ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์งํฉ์
public โก๏ธ static ํ์ผ ๋ณด๊ดํจ
src โก๏ธ์์ค์ฝ๋ ๋ณด๊ดํจ
src-index.js โก๏ธ app.js์ ๋ฉ์ธํ์ด์ง๋ฅผ ์ด์ด์ค root
App.js์์ return์์ ์ฐ๋ ๋ฌธ๋ฒ์ HTML์ฒ๋ผ ์๊ธด JSX์ด๋ค.
๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ { }์ ์ฌ์ฉํ์ฌ ํธํ๊ฒ ์ฌ์ฉ
๊ธฐ์ด ๋ฌธ๋ฒ๐ฉ
import ์ด๋ฆ from '์ด๋ฏธ์ง ๊ฒฝ๋ก'
<img src={ ์ด๋ฆ } />
์ด๋ฏธ์ง ์ ๋ก๋ํ๊ธฐ
<div style={ { color : 'black', fontSize : '30px' } }>asd</div>
style ์ฌ์ฉ๋ฒ โ-โ์ ์ฌ์ฉ๋ถ๊ฐํ๋ ์นด๋ฉํ์์ผ๋ก ์ฌ์ฉ
import React, { useState } from "react"; // ๋ฆฌ์กํธ์์๋ ๋ด์ฅํจ์๋ฅผ ์ฐ๊ฒ ๋ค. state๋ ๋ณ์๋์ ์ฐ๋ ๋ฐ์ดํฐ ๊ณต๊ฐ
let [title, titleModify] = useState(["์ ๋ผ๋ฉด ๋ง์์ด", '์ฐ์ ๋ ๊ฐ์ด ๋จน์ด์ผํจ']);
<p>{ title[0] }</p> // '์ ๋ผ๋ฉด ๋ง์์ด'
ustState ์ฌ์ฉ ์ด์ -> app์ฒ๋ผ ์ฌ์ฉํ๊ธฐ์ํด, ์๋ก๊ณ ์นจ์์ด ์ฌ๋๋๋ง๋จ, ์์ฃผ๋ฐ๋๋ ์ค์ํ ๋ฐ์ดํฐ๋ฅผ ์ฐ์.
useStateํจ์ ์ฌ์ฉ์ [โ์ ๋ผ๋ฉด ..โ, ํจ์] ์ด๋ ๊ฒ ๋์ด -> ์ด๊ฒ์ ์ ๋ฌธ๋ฒ์ผ๋ก a๋ณ์์๋ โ์ ๋ผ๋ฉดโฆโ b๋ณ์์๋ ํจ์๋ฅผ ๋ฃ์
/* eslint-disable*/
warning์ ๋ณด๊ธฐ์ซ์๋ ์ฐ๋ฉด ์์ ์ค
let [like, likeModify] = useState(0)
<span className='like' onClick={ ()=>{ likeModify( like+1 ) } }>๐</span><p>{like}</p>
// ๋ธ๊ธฐ๋ชจ์ ํด๋ฆญ์๋ง๋ค ์ซ์๊ฐ ์ฌ๋ผ๊ฐ
onClick์ {}์ ์ฌ์ฉํ๊ณ , ๊ทธ์์ ํญ์ ํจ์์ฌ์ผํ๋ค. ๊ทธ๋ฆฌ๊ณ state๊ฐ์ ๋ฐ๊พธ๊ณ ์ถ์๋ ์์ ํจ์๋ฅผ ์ฌ์ฉํ๋ค.
function ์ ๋ชฉ๋ฐ๊พธ๊ธฐ() {
var newArray = [...title]; // var newArray = title (X)
newArray[0] = '๋ธ๋ ์ ๋ผ๋ฉด';
titleModify( newArray );
}
<button onClick={ ์ ๋ชฉ๋ฐ๊พธ๊ธฐ }>๋ฐ๊ฟ</button> // ์ ๋ชฉ๋ฐ๊พธ๊ธฐ() (X)
๋ณ์์ state๋ฅผ ๋ด์๋ ๊ทธ๋ฅ ๋ด์ผ๋ฉด ๊ฐ์ ๊ณต์ ํ๋ ๊ฒ์ด๋ค. ์ฆ ์๋์ ๊ฐ๋ ๋ฐ๋๋ค. [โฆ]์ ์ฌ์ฉํ์
ํจ์๋ฅผ ํจ์()๋ก ํธ์ถํ๋ฉด ๋ฐ๋ก ์คํ์ด๋ฏ๋ก ํด๋ฆญ์์๋ง ํธ์ถํ ์ ์๊ฒ ()๋ฅผ ๋นผ์ฃผ์.
function Nav() {
return (
<div className="black-nav">
<div>LJH</div>
</div>
)
}
function App() {
return (
<Nav></Nav>
)
}
Component ์ฌ์ฉํ๊ธฐ
- ์ด๋ฆ์ ๋๋ฌธ์๋ก ์ฐ๊ธฐ
- ํ๋์ div๋ก ๋ฌถ์ด์ฃผ๊ธฐ // <></>์ ์จ๋๋จ
- App ์ปดํฌ๋ํธ์ ๊ฐ์ ์์น๋ก ํด์ฃผ๊ธฐ
์ด๋ ๊ฒ๋๋ฉด App์ ๋ถ๋ชจ์ปดํฌ๋ํธ nav๋ ์์์ปดํฌ๋ํธ๊ฐ ๋๋ค.
์์ฃผ๋ฐ๋๋ ๊ฒ๋ค์ ์ฌ์ฉํ์