๋ชฉ์ฐจ
์์ HTML ํ์ผ์์ React๋ฅผ ์ฌ์ฉํด๋ณด์
์ผ๋จ์ ์์ HTML์์ React๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Hello React!</title>
<script src="https://unpkg.com/react@16/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
<script src="https://unpkg.com/babel-standalone@6.26.0/babel.js"></script>
</head>
<body>
<div id="root"></div>
<script type="text/babel">
class App extends React.Component {
render() {
return <h1>Hello world!</h1>
}
}
ReactDOM.render(<App />, document.getElementById('root'))
</script>
</body>
</html>
CDN์ผ๋ก ๋ถ๋ฌ์ค๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ๋ฌด์จ์ญํ ์ ํ๊ณ ์๋๊ฑธ๊น?
React | - ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค. |
Babel | - ๋ฆฌ์กํธ๋ JSX๋ผ๋ ๋ฌธ๋ฒ์ ์ฌ์ฉํ๋๋ฐ, ์ด Babel์ด JSX๋ฅผ JS๋ก ๋ณํํด์ค๋ค. - JSX๋ ๋ค์์ ์์ธํ ์์๋ณผ ์์ . ์์ ์์ return <h1>Hello world!</h1> ๋ถ๋ถ์ด JSX๊ฐ ์ฌ์ฉ๋ ๋ถ๋ถ์ด๋ค. |
React-DOM | - ์ต์ข
์ ์ผ๋ก Babel์ ํตํด JS๋ก ๋ณํ๋ ์ฝ๋๋ฅผ HTML DOM์ผ๋ก ๋ณํํด์ค๋ค. - <App/> ์ด๋ฐ ํ๊ทธ๋ HTML์ ์กด์ฌํ์ง ์๋๋ค. ์ด๋ฐ ํน์ดํ ํ๊ทธ๋ค์ HTML DOM์ผ๋ก ๋ณํํด์ค๋ค. |
Script ์ค๋ช
render() :
DOM ๋ ธ๋ ๋ ๋๋ง ์ ํ์๋ก ์ฌ์ฉํด์ผํ๋ ํจ์์ด๋ค.
render๋ ๋ฌธ์์ด์ ๋ฐํํ์ง ์๋๋ค. '' ๋ฐ์ดํ ์ฌ์ฉ ๊ธ์ง!!!
element = ์ถ๊ฐํ๋ ค๋ ๋ด์ฉ (JSX)
container = element๋ฅผ ๋ณด์ฌ์ฃผ๊ณ ์ ํ๋ DOM์ ์์น
ReactDOM.render(element, container);
ReactDOM.render(element, container, callback);
//callbackํจ์๋ ํ์ ์๋
ReactDOM ๋ฉ์๋๋ก id๊ฐ 'root'์ธ ํ๊ทธ์ <App/>์ ํ๋ฉด์ ๋ ๋๋งํด์ค๋ค.
์คํ๊ฒฐ๊ณผ
id๊ฐ 'root'์ธ ํ๊ทธ ํ์์ <h1>Hello world!</h1> ๊ฐ ์ถ๊ฐ๋์๋ค.
JSX๋ ๋ญ์ง? React Element๋ฅผ ์์ฑํด์ฃผ๋ ๋ฌธ๋ฒ
const element = <h1 className="title"> hi {name}!! ๋ฐ๊ฐ์ </h1>;
React์์๋ JSX๋ฅผ ์ฌ์ฉํ๋๋ฐ, React์ฌ์ฉ์์ ํธ์๋ฅผ ์ํด Javascript๋ฅผ ํ์ฅํ ๋ฌธ๋ฒ์ด๋ค.
* ๊ณต์์ ์ธ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฌธ๋ฒ์ ์๋๋ ์ฃผ์! *
JSX๋ฅผ ์ฌ์ฉํ๋ฉด Javascript์์ HTML์ ๋ ์ฝ๊ณ ํธ๋ฆฌํ๊ฒ ์์ฑํ ์ ์์ผ๋ฉฐ,
JSX๋ ์คํ๋๊ธฐ ์ ์ Babel์ ์ฌ์ฉํ์ฌ ์ผ๋ฐ ์๋ฐ์คํฌ๋ฆฝํธ ํํ์ ์ฝ๋๋ก ๋ณํ๋๋ค.
(Babel : ๊ณผ๊ฑฐ๋ฒ์ ๋ธ๋ผ์ฐ์ ์์ ES6+๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ํด์ฃผ๋ Javascript ์ปดํ์ผ๋ฌ)
const element = React.createElement('h1', { className:'title' }, 'hi {name}!! ๋ฐ๊ฐ์');
์์ ์ฝ๋๋ฅผ JSX๋ฌธ๋ฒ ์์ด ์ฌ์ฉํ ๊ฒฝ์ฐ์ React.createElement๋ฅผ ์ด์ฉํ๋ค.
๋ค์๋งํด, JSX๋ React Element๋ฅผ ์์ฑํด์ฃผ๋ ๊ฒ์ด๋ค!
https://green-labs.github.io/rescript-in-korean/ReScript-React/02-Main-Concepts/01-Elements-and-JSX
์์ผ๋ก JSX๋ฌธ๋ฒ์ ์์๋ณผ๊ฑด๋ฐ, ์ ๋ฒ์ ๋ง๋ค์๋ beginํ๋ก์ ํธ ํด๋๋ก ๋์์์ src/App.js๋ฅผ ์์ ํ๋ฉด๋๋ค.
JSX ๋ฌธ๋ฒ1. ๋ฐ๋์ 1๊ฐ์ง ์์๋ก ๊ฐ์ธ์ ธ์ผํ๋ค.
import logo from './logo.svg';
import './App.css';
//์ฃผ์์ ํด์ ํ๋ฉด ๋ฐ๋ก ์๋ฌ๋ฐ์ํ๋ค.
//function createHeadFail(){
// return (
// <h1>์ ๋ชฉ1</h1>
// <h2>์ ๋ชฉ2</h2>
// );
//}
//์ฑ๊ณต
function createHead(){
return (
<div>
<h1>์ ๋ชฉ1</h1>
<h2>์ ๋ชฉ2</h2>
</div>
);
}
function App() {
return createHead();
}
export default App;
๋ฆฌ์กํธ๋ ๊ฐ์DOM์ ์ฌ์ฉํ๋๋ฐ, ๊ฐ์DOM์ ์ปดํฌ๋ํธ์ ๋ณํ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ฐ์งํ๊ธฐ ์ํด
ํ๋์ DOM๊ตฌ์กฐ๋ก ์ด๋ฃจ์ด์ ธ์ผํ๋ค๋ ๊ท์น์ ๊ฐ์ง๊ณ ์๋ค.
๊ทธ๋ฐ๋ฐ... ํ๋์ DOM์ผ๋ก ๋ฐํํ๋๊ฑด ์์ฃผ ํฐ ๋จ์ ์ ๊ฐ์ง๊ณ ์๋ค. ์๋ ์์๋ฅผ ๋ณด์
import logo from './logo.svg';
import './App.css';
function createTable() {
return (
<table>
<tr>
{createColumns()}
</tr>
</table>
);
}
function createColumns() {
return (
<div>
<td>Hello</td>
<td>World</td>
</div>
);
}
function App() {
return createTable();
}
export default App;
์ค๊ฐ์ ๋ถํ์ํ <div>ํ๊ทธ๊ฐ ๋ค์ด๊ฐ๋ฒ๋ฆฐ๋ค..
์ด๋ ๊ฒ๋๋ฉด ์คํ์ผ ์ ์ฉ๋ ๋ณต์กํด์ง๊ณ , ๊ตฌ์กฐ ์์ฒด๋ ๋ถํ์ํ๊ฒ ๋น๋ํด์ง๋ค.
์ด๋ด๋ ์ฌ์ฉํ๋ ๊ฒ์ด Fragment์ด๋ค.
JSX ๋ฌธ๋ฒ1-1. Fragment๋ฅผ ์ฌ์ฉํ์
function createColumns() {
return (
<>
<td>Hello</td>
<td>World</td>
</>
//<React.Fragment>๋ฅผ ๋จ์ถํ ๊ฒ์ด๋ค.
);
}
๊น๋.
JSX ๋ฌธ๋ฒ2. JSX ๋ด๋ถ์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํํํ๋ ค๋ฉด { }๋ฅผ ์ฌ์ฉํ๋ค.
๋จ, { }๋ด์์๋ if / for๋ฌธ์ ์ฌ์ฉํ ์ ์๊ธฐ๋๋ฌธ์ ์ผํญ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํด์ผํ๋ค.
function createHead(){
const name = '์ฒ ์';
return <h1> {name} </h1>;
}
function createHead(){
const name = '์ฒ ์';
return <h1> { name == '์ฒ ์' ? '์ฒ ์์ผ ์๋
' : '์ํฌ์ผ ์๋
' } </h1>;
}
function createHead(){
const name = '์ฒ ์';
return <h1> { name == '์ฒ ์' && '์ฒ ์์ผ ์๋
' } </h1>;
//์กฐ๊ฑด์ด true์ผ๋๋ง '์ฒ ์์ผ ์๋
'์ ๋
ธ์ถํ๋ค.
}
function createHead(){
return <h1> { getName() } </h1>;
}
function getName(){
const name = '์ฒ ์';
return name == '์ฒ ์' ? '์ฒ ์์ผ ์๋
' : '์ํฌ์ผ ์๋
';
}
JSX ๋ฌธ๋ฒ3. JSX๋ ํํ์์ด๊ธฐ๋๋ฌธ์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ณ์์ฒ๋ผ ์ฌ์ฉํ ์ ์๋ค.
function createHead(){
const name = '์ฒ ์';
let response = <h1> ์ํฌ์ผ ์๋
</h1>;
if(name == '์ฒ ์'){
response = <h1> ์ฒ ์์ผ ์๋
</h1>;
}
return response;
}
JSX ๋ฌธ๋ฒ4. JSX์ CSS ์ ์ฉ์ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ camelCase๋ก ์์ฑ ์ ์ฉ
function createHead(){
const style = {
backgroundColor: 'yellow',
fontSize: '3em'
}
return <div style={style}> ์๋
</div>;
}
JSX ๋ฌธ๋ฒ5. JSX์ Class ์ ์ฉ์ className์ ์์ฑํ๋ค
function createHead(){
return <div className="header"> ์๋
</div>;
}
'๐ Front > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] Component, Props๋? ํด๋์คํ/ํจ์ํ ์ปดํฌ๋ํธ, ์ปดํฌ๋ํธ์ ๋ณ์ ์ ๋ฌํ๊ธฐ (0) | 2023.02.04 |
---|---|
[React] Element. ๋ณ๊ฒฝ๋ ๋ถ๋ถ๋ง ๋ค์ ๋ ๋๋งํ์ (0) | 2023.02.04 |
[React] ํ๋ก์ ํธ ์ ํ (0) | 2023.01.05 |