๐ค React ๋ผ์ด๋ธ๋ฌ๋ฆฌ...?
JS๋ฅผ ์ฌ์ฉํด HTML๋ก ๊ตฌ์ฑ๋ UI๋ฅผ ์ ์ดํ๋ค๋ฉด, DOM ๋ณํ์ ์ํด ์๋์ ๊ฐ์ ๊ณผ์ ์ ๋ฐ๋ฅธ๋ค.
1. Selector API๋ฅผ ์ฌ์ฉํด ํน์ DOM์ ์ ํ
2. ํน์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ ์, ๋ณํ๋ฅผ ์ฃผ๋๋ก ์ค์
๋ค๋ง, ์น์ ๊ท๋ชจ๊ฐ ์ปค์ง๊ฒ ๋๋ฉด, DOM์ ์ง์ ๊ฑด๋๋ฆด ๋ ์ฝ๋๊ฐ ๋์กํด์ง๊ธฐ ์ฝ๋ค.
์ฒ๋ฆฌํด์ผํ ์ด๋ฒคํธ, ๊ด๋ฆฌํด์ผํ ์ํ๊ฐ, DOM ๋ฑ์ด ๋ค์ํด์ง๊ธฐ ๋๋ฌธ.
์ด๋ก ์ธํด ์ ๋ฐ์ดํธ ๊ท์น๋ ๋ง์ด ๋ณต์กํด์ง๊ฒ๋๋ค.
React๋ ์ด๋ค ์ํ๊ฐ ๋ฐ๋์์ ๋, ๊ทธ ์ํ์ ๋ฐ๋ผ DOM์ ์ด๋ป๊ฒ ์ ๋ฐ์ดํธ ํ ์ง ๊ท์น์ ์ ํ๋ ๋ฐฉ์์ด ์๋, ์์ ๋ค ๋ ๋ ค๋ฒ๋ฆฌ๊ณ ์ฒ์๋ถํฐ ์๋ก ๋ง๋๋, ๊ฐ์์ DOM์ธ Virtual DOM๋ฐฉ์์ ์ฌ์ฉํ๋ค.
Ex.
๋ฅผ ํตํด react ์ปดํฌ๋ํธ๋ฅผ ๋ถ๋ฌ์จ๋ค.
import React from 'react';
react ์ปดํฌ๋ํธ๋ XMLํ์์ ๊ฐ์ ๋ฐํํ๋๋ฐ, ์ด๋ฅผ JSX๋ผ ๋ถ๋ฅธ๋ค.
์ด๋ Hello๋ผ๋ ์ปดํฌ๋ํธ๋ฅผ ๋ด๋ณด๋ด๊ฒ ๋ค๋ ์๋ฏธ๋ก ๋ค๋ฅธ ์ปดํฌ๋ํธ์์ ๋ถ๋ฌ์ ์ฌ์ฉํ ์ ์๋ค.
export default Hello;
ex)
import Hello from './Hello';
import React from 'react'; function Hello() { return ( <div> Hello World </div> ); } export default Hello;
๐ค JSX...?
JSX๋ react์ ์๊น์๋ฅผ ์ ์ํ ๋ ์ฌ์ฉํ๋ ๋ฌธ๋ฒ์ผ๋ก HTML๊ฐ์ด ์๊ธด JS์ด๋ค.
react ์ปดํฌ๋ํธ ํ์ผ์์ XMLํํ๋ก ์ฝ๋๋ฅผ ์์ฑํ๋ฉด babel์ด JSX๋ฅผ JS๋ก ๋ณํํ๋ค.
return <div>์๋ </div>;
babel: JS์ ๋ฌธ๋ฒ์ ํ์ฅํด์ฃผ๋ ๋๊ตฌ
ex)
import React from 'react'; import Hello from './Hello'; function App() { return ( <> <Hello /> <div>์๋ ํ๊ณ์ธ์</div> </> ); } export default App;
๐ JSX์์ ํ๊ทธ์ style, CSS์ class๋ฅผ ์ค์ ํ๋ ๋ฐฉ๋ฒ
1. ์ธ๋ผ์ธ style์ ๊ฐ์ฒดํํ๋ก ์์ฑ
2. HTML์์ -๋ก ๊ตฌ๋ถ๋๋ ๋จ์ด๋ camelCaseํํ๋ก ์์ฑ
3. CSS์ ํด๋์ค๋ className= ์ผ๋ก ์ค์
cf. ์ฃผ์์ {/**/} ๋ // ์ ์ฌ์ฉํจ.
๋ฅผ ์ฌ์ฉํด HTML๋ก ๊ตฌ์ฑ๋ UI๋ฅผ ์ ์ดํ๋ค๋ฉด, DOM ๋ณํ์ ์ํด ์๋์ ๊ฐ์ ๊ณผ์ ์ ๋ฐ๋ฅธ๋ค.
1. Selector API๋ฅผ ์ฌ
๐ props๋ฅผ ํตํด ์ปดํฌ๋ํธ์ ๊ฐ ์ ๋ฌํ๊ธฐ
- properties์ ์ค์๋ง๋ก ์ปดํฌ๋ํธ์ ๊ฐ์ ์ ๋ฌํ๊ธฐ ์ํด ์ฌ์ฉ.
Ex) App ์ปดํฌ๋ํธ์์ Hello์ปดํฌ๋ํธ์ name์ด๋ผ๋ ๊ฐ์ ์ ๋ฌํ๊ณ ์ถ๋ค๋ฉด?
โHello.js ์ปดํฌ๋ํธ
import React from 'react'; function Hello(props) { return <div>์๋ ํ์ธ์ {props.name}</div> } export default Hello;
โApp.js ์ปดํฌ๋ํธ
import React from 'react'; import Hello from './Hello'; function App() { return ( <Hello name="react" /> ); } export default App;
cf) ์ฌ๋ฌ๊ฐ์ props๋ฅผ ์ ๋ฌํ๊ณ ์ ํ๋ค๋ฉด?
โApp.js
import React from 'react'; import Hello from './Hello'; function App() { return ( <Hello name="react" color="red"/> ); } export default App;โ
โHello.js
import React from 'react'; function Hello({ color, name }) { return <div style={{ color }}>์๋ ํ์ธ์ {name}</div> } export default Hello;
defaultProps ๋ก ๊ธฐ๋ณธ๊ฐ ์ค์
์ปดํฌ๋ํธ์ props ๋ฅผ ์ง์ ํ์ง ์์์ ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉ ํ ๊ฐ์ ์ค์ ํ๊ณ ์ถ๋ค๋ฉด ์ปดํฌ๋ํธ์ defaultProps ๋ผ๋ ๊ฐ์ ์ค์ ํ๋ฉด ๋๋ค.
import React from 'react'; function Hello({ color, name }) { return <div style={{ color }}>์๋ ํ์ธ์ {name}</div> } Hello.defaultProps = { name: '์ด๋ฆ์์' } export default Hello;
'ETC(front,back) > React(HTML, CSS, JS)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
<frontend> {15} </React_part 3. ๋ฐฐ์ด> (0) | 2023.07.11 |
---|---|
<frontend> {15} </React_part 2. ๋์ interaction> (0) | 2023.07.11 |
<frontend> {13} </JS์ ๊ฐ์ฒด, ๋ฌธ์๊ฐ์ฒด๋ชจ๋ธ(DOM)> (0) | 2023.07.05 |
<frontend> {12} </JS๊ธฐ๋ณธ ๋ฌธ๋ฒ, let๊ณผ const, onclick> (0) | 2023.07.05 |
<frontend> {11} </Javascript ๊ธฐ์ด์ฉ์ด ๋ฐ ์ ์ถ๋ ฅ ๋ฐฉ๋ฒ> (0) | 2023.07.05 |