#
React๋ฒจ๋กํผํธ์ ํจ๊ปํ๋ ๋ชจ๋ ๋ฆฌ์กํธ
#
React Component ๋ง๋ค๊ธฐHello.js
import React from 'react';
function Hello() { return <div>Hello World!</div>;}
export default Hello;
๋ฆฌ์กํธ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค ๋
import React from 'react';
๋ฅผ ๋ฃ์ด์ค์ผํ๋ค.
๋ฆฌ์กํธ ์ปดํฌ๋ํธ๋ XML ํ์์ ๊ฐ์ ๋ฐํํ ์ ์๋๋ฐ ์ด๋ฅผ JSX ๋ผ๊ณ ๋ถ๋ฅธ๋ค.
export default Hello;
์ด ์ฝ๋๋ Hello ๋ผ๋ ์ปดํฌ๋ํธ๋ฅผ ๋ด๋ณด๋ด๊ฒ ๋ค๋ ์๋ฏธ.
App.js
import React from 'react';import Hello from './Hello';
function App() { return ( <div> <Hello /> </div> );}
export default App;
์คํ์์ผ๋ณด๋ฉด, ( yarn start
or npm start
)
index.js
import React from 'react';import ReactDOM from 'react-dom';import './index.css';import App from './App';import * as serviceWorker from './serviceWorker';
ReactDOM.render(<App />, document.getElementById('root'));
// If you want your app to work offline and load faster, you can change// unregister() to register() below. Note this comes with some pitfalls.// Learn more about service workers: https://bit.ly/CRA-PWAserviceWorker.unregister();
์ฌ๊ธฐ์ ReactDOM.render
๋ฅผ ๋ณด๋ฉด, id
๊ฐ root
์ธ DOM ๋ด๋ถ์ ๋ฆฌ์กํธ ์ปดํฌ๋ํธ( <App />
)๋ฅผ ๋ ๋๋งํ๊ฒ ๋ค๋ ์๋ฏธ์ด๋ค.
์ด DOM์ public/index.html
๋ด๋ถ์ ์๋ค.
<div id="root"></div>
#
JSXJavaScript + XML, ์๋ฐ์คํฌ๋ฆฝํธ์ ํ์ฅ ๋ฌธ๋ฒ. ์๋ฐ์คํฌ๋ฆฝํธ ๋ด๋ถ์ ๋งํฌ์ ์ฝ๋๋ฅผ ์์ฑํด ์ค ์ ์๊ฒ ํด์ค. HTML ๊ฐ์ด ์๊ฒผ์ง๋ง ์ค์ ๋ก JS ์ด๋ค.
return <div>์๋
ํ์ธ์</div>;
Babel ์ XML ํํ์ ์ฝ๋๋ฅผ JS๋ก ๋ณํํด์ค๋ค.
#
๊ท์นํ๊ทธ๋ฅผ ์ด์์ผ๋ฉด ๋ซ์์ผ ํจ. (
input
,br
ํฌํจ ๋ชจ๋ ํ๊ทธ. ํ๊ทธ ์ฌ์ด์ ๋ด์ฉ์ด์์ ๋,<input/>
๋ก ์ ํํด๋ก์ง ๊ฐ๋ฅ)๋ ๊ฐ ์ด์์ ํ๊ทธ๋ ํ๋์ ํ๊ทธ๋ก ๊ฐ์ธ์ ธ ์์ด์ผ ํ๋ค.
<> </>
Fragment๋ก ์ฌ์ฉํ๋ค๋ฉด ๋ถํ์ํ ํ๊ทธ ์์ด ๋ ๊ฐ ์ด์์ ํ๊ทธ ๊ฐ๋ฅ.JSX ๋ด๋ถ์ ๋ณ์๋
{}
๋ก ๊ฐ์ธ์ ๋ณด์ฌ์ค ์ ์์.
style
๊ณผ className
#
style
๊ณผ CSS class
์ค์ ๋ฐฉ๋ฒ์ด HTML๊ณผ ๋ค๋ฅด๋ค.
์ธ๋ผ์ธ ์คํ์ผ์ ๊ฐ์ฒด์ฒ๋ผ ์์ฑ.
background-color
๊ฐ์ด-
๋ก ๊ตฌ๋ถ๋ ์์ฑ ์ด๋ฆ์ ๊ฐ์ง ์์ฑ๋ค์ camelCase ํํ๋ก (backgroundColor
)CSS
class
์ค์ ์์class=""
๊ฐ ์๋className=""
์ผ๋ก.
App.js
import React from 'react';import Hello from './Hello';import './App.css';
function App() { const name = 'react'; const style = { backgroundColor: 'black', color: 'aqua', fontSize: 24, // ๊ธฐ๋ณธ ๋จ์ px padding: '1rem', // ๋ค๋ฅธ ๋จ์ ์ฌ์ฉ ์ ๋ฌธ์์ด๋ก ์ค์ };
return ( <> <Hello /> <div style={style}>{name}</div> <div className="gray-box"></div> </> );}
export default App;
App.css
.gray-box { background: gray; width: 64px; height: 64px;}
#
์ฃผ์{/* JSX ๋ด๋ถ ์ฃผ์ ์์ฑ๋ฒ */}
์ด๋ฆฌ๋ ํ๊ทธ ๋ด๋ถ์์๋ // ์ด๋ฐ ํํ์ ์ฃผ์ ์์ฑ๋ ๊ฐ๋ฅ
props
๋ฅผ ํตํด ์ปดํฌ๋ํธ์ ๊ฐ ์ ๋ฌ#
App ์ปดํฌ๋ํธ์์ Hello ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ ๋ ๊ฐ์ ์ ๋ฌํ๊ณ ์ถ์ ๋
App.js
import React from 'react';import Hello from './Hello';
function App() { return <Hello name="react" />;}
export default App;
Hello.js
import React from 'react';
function Hello(props) { return <div>์๋
ํ์ธ์ {props.name}</div>;}
export default Hello;
props
๋ผ๋ ํ๋ผ๋ฏธํฐ๋ก ์กฐํ, ๊ฐ์ฒด ํํ๋ก ์ ๋ฌ๋๋ฏ๋ก props.name
์ผ๋ก ์กฐํ ๊ฐ๋ฅ
#
๋น๊ตฌ์กฐํ ํ ๋นApp.js
import React from 'react';import Hello from './Hello';
function App() { return <Hello name="react" color="red" />;}
export default App;
name
, color
๋ ๊ฐ์ง ๊ฐ์ ์ ๋ฌ.
import React from 'react';
function Hello(props) { return <div style={{color: props.color}}>์๋
ํ์ธ์ {props.name}</div>;}
export default Hello;
color: props.color
๋ ๊ฐ์ฒด์ด๋ฏ๋ก{}
๋ก ํ ๋ฒ ๊ฐ์ธ๊ณ , ์ด ๊ฐ์ฒด๊ฐ JS ๊ฐ์ด๋ฏ๋ก{}
๋ก ํ๋ฒ ๋ ๊ฐ์ผ๋ค.
๋ ๊ฐ์ง ๊ฐ์ ์ ๋ฌํ ๋ ๋น๊ตฌ์กฐํ ํ ๋น์ผ๋ก ๊ฐ๊ฒฐํ๊ฒ ์์ฑ์ด ๊ฐ๋ฅํ๋ค.
import React from 'react';
function Hello({color, name}) { return <div style={{color}}>์๋
ํ์ธ์ {name}</div>; // color: color -> color ๋ก ์์ฑ ๊ฐ๋ฅ}
export default Hello;