๐section 0
์ฌ์ฉ์ ์ ์ ํ๊ทธ -> React์์๋ Component๋ผ๊ณ ํจ.
1. ๊ฐ๋
์ฑ์ด ์ข๋ค.
2. ์ฌ์ฌ์ฉ์ฑ์ด ๋๋ค. -> ํ ๋ฒ ์ ์ํด ๋๋ฉด ๋ค๋ฅธ ๊ณณ์์ ์ฌ์ฌ์ฉํ ์ ์๋ค.
3. ์ ์ง๋ณด์๊ฐ ์ข๋ค. -> ์ค์๊ฐ์ผ๋ก ๋ณ๊ฒฝ๋ ๋ด์ฉ์ด ์
๋ฐ์ดํธ ๋๋ค.
๐section 2
๐ฎ1. ๋ฆฌ์กํธ๊ฐ ์๋ค๋ฉด?
public ๋๋ ํ ๋ฆฌ -> npm run start ํ์ ๋ ํ์ผ์ ์ฐพ๋ ๋๋ ํ ๋ฆฌ
semantic code <header></header> ๋ <nav></nav>์ ๊ฐ์ด ๊ธฐ๋ฅ์ ์์ง๋ง ์๋ฏธ๋ฅผ ํ์
ํ๊ธฐ ์ฝ๊ฒ ๊ตฌ๋ถํ ์ฝ๋
๋ง์ฝ html ์ฝ๋๊ฐ 1000๋ง์ค, 1์ต์ค์ด๋ผ๋ฉด ์ฝ๋๊ฐ ํ๋์ ์ ๋ค์ด์จ๋ค. -> ํผ๋์ค๋ฌ์
์ฝ๋๋ฅผ ์๋ณด์ด๊ฒ ๊ฐ์ถฐ๋๊ณ ์ฌํํ๊ฒ ํํํ๊ณ ์ถ๋ค! -> ๊ทธ๊ฑธ ๊ฐ๋ฅํ๊ฒ ํด์ฃผ๋ ๊ฒ์ด ๋ฆฌ์กํธ
๐ฎ2. ์ปดํฌ๋ํธ ๋ง๋ค๊ธฐ 1
import React, {Component} from 'react';
import './App.css';
class App extends Component{
render(){
return (
<div className='App'>
Hello, React!!
</div>
)
}
}
์ ์ฝ๋๋ฅผ Subject๋ผ๋ ํ๊ทธ๋ก ๋ฐ๊พธ๊ธฐ
class Subject extends Compoent{
render(){ -> javascript์ ์ต์ ๋ฒ์ ์์๋ function ์๋ต
return (
<h1>WEB</h1> -> ์ฃผ์์ : ํ๋์ ์ต์์ ํ๊ทธ๋ง ์จ์ผ ํจ
world wide web!
);
}
}
๊ฒฐ๊ณผ :
import React, {Component} from 'react';
import './App.css';
class App extends Component{
render(){
return (
<div className='App'>
<Subject></Subject> -> ๋ฐฉ๊ธ ์ ์ฝ๋๋ฅผ subject๋ก ๋ฐ๊ฟ์ค ๊ฒ์
</div>
)
}
์ ์ฝ๋๋ค์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๊ฐ ์๋! ์ค์ ๋ก ์ฐ๋ฉด ๋ฌธ๋ฒ์ค๋ฅ ๋จ
์๋ฐ์คํฌ๋ฆฝํธ์ ๊ฑฐ์ ์ ์ฌํ๋ ๋ฒ๊ฑฐ๋ก์ด ์์
์ ํผํ๊ธฐ ์ํด
jsx๋ผ๋ ๊ฒ์ ๋ง๋ ๊ฒ์.
๐ฎ3. ์ปดํฌ๋ํธ ๋ง๋ค๊ธฐ2
class TOC extends Component{
render(){
return (
<nav>
<li><a href="1.html">HTML</a></li>
<li><a href="2.html">CSS</a></li>
<li><a href="3.html">Javascript</a></li>
</nav>
);
}
}
class App extends Component{
render(){
return (
<div className='App'>
<Subject></Subject>
<TOC></TOC>
<Content></Content>
</div>
)
}
}
class Content extends Component{
render(){
return(
<article>
<h2>HTML</h2>
HTML is HyperText Markup Language.
</article>
);
}
}
๋ฆฌ์กํธ๋ฅผ ๋ฐ๋ผ๋ณด๋ ์ฒซ ๋ฒ์งธ ์์ -> ์ ๋ฆฌ์ ๋ ํด ์ฃผ๋ ๋๊ตฌ
์ ๋ฆฌ์ ๋ ํ ์ด๋ฆํ๋ฅผ ๋ถ์ด๋ฉด ์ด๋ฆ๋ง ๊ธฐ์ตํ๋ฉด ๋จ
๋ฆฌ์กํธ๋ ๋์ผํจ
์ฝ๋ ์ ๋ฆฌ ํ ์ปดํฌ๋ํธ ์ด๋ฆ๋ง ๋ถ์ด๋ฉด ๊ทธ๊ฒ๋ง ๊ธฐ์ตํ๋ฉด ๋จ
๐ฎ4. props
์ด๊ฑธ ๊ทธ๋๋ก ์ธํฐ๋ท์ ์ฌ๋ฆฌ๋ฉด ์ฌ๋๋ค์ ์ด ์ฝ๋๋ฅผ ๋ค๋ฅธ ๊ณณ์ ๋ถ์ฌ์ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.App
๊ทธ๋ฐ๋ฐ ํญ์ ๋๊ฐ์ ๊ฒฐ๊ณผ๋ฌผ์ ๋ด๋๋๋ค! -> ๋ฌด์ธ๊ฐ ์์ฝ๋ค
ex) <a href=""></a>์ attribute(์์ฑ) ์ ํตํด ๊ฐ๊ฐ์ ์ฃผ์๋ฅผ ํํํจ
๊ทผ๋ฐ ํญ์ ๋๊ฐ์ ์ฃผ์๋ก๋ง ์ฐ๊ฒฐ๋๋ค!
class App extends Component{
render(){
return (
<div className='App'>
<Subject title="WEB" sub="world wide web!"></Subject>
<Subject title="React" sub="For UI"></Subject>
<TOC></TOC>
<Content title="HTML" desc ="HTML is HyperText Markup Language."></Content>
</div>
)
}
}
title์ javascript๋ attribute๋ผ๊ณ ํ์ง๋ง, react์์๋ props๋ผ๊ณ ํจ
class Subject extends Compoent{
render(){
return (
<h1>{this.props.title}</h1>
{this.props.sub}
);
}
}
class Content extends Component{
render(){
return(
<article>
<h2>{this.props.title}</h2>
{this.props.desc}
</article>
);
}
}
์ ์ฝ๋๋ ์์ ์ฝ๋์ ๊ฒฐ๊ณผ๋ ๋์ผํ์ง๋ง ์ฝ๋๋ ํจ์จ์ ์ด๊ณ , ๊น๋ํด์ก๋ค -> ์ฝ๋ ๋ฆฌํฉํ ๋ง์ด๋ผ๊ณ ํจ.App
title๊ณผ sub์ด subject๋ผ๋ ์ปดํฌ๋ํธ์ ์
๋ ฅ๊ฐ์ด ๋์ด์ ๊ทธ์ ๋ฐ๋ผ ์ถ๋ ฅ๊ฐ์ด ๋ฐ๋๊ฒ ํจ
์๋ฒฝํ๊ฒ ๋์ํ๋ ์ฌ์ฉ์ ์ ์ ํ๊ทธ ์์ฑ~!
๐ฎ5. React Developer Tools
react ํํ์ด์ง -> community -> tools -> debugging
ํ์ฌ ๋ฆฌ์กํธ๋ก ๋ง๋ค์ด์ง ์ฑ๋ค์ ์ํ๋ฅผ ํ์ธ ๊ฐ๋ฅ
react developer tools ์ค์น
์ํ๋ ํ์ด์ง -> ๊ฐ๋ฐ์ ๋๊ตฌ -> elements ํด๋ฆญ
<Subject title="WEB"></Subject>์ ์์ญ์ <h1>WEB</h1> ์ด ๋ถ๋ถ์ด์๋ค.
react ํญ ํด๋ฆญ
react๋ก ๋ง๋ ์ปดํฌ๋ํธ๋ฅผ ๋ณด์ฌ์ฃผ๋ ๊ธฐ๋ฅ
ํ๊ทธ ๋ถ์ -> elementsํญ
์ปดํฌ๋ํธ ๋ถ์ -> reactํญ
react ํญ์์ ๊ฐ์ ์ค์๊ฐ์ผ๋ก๋ ๋ณ๊ฒฝํ ์ ์๋ค.
๐ฎ6. Component ํ์ผ๋ก ๋ถ๋ฆฌํ๊ธฐ
ํ ํ์ผ ์์ ์ปดํฌ๋ํธ๊ฐ 1000๊ฐ๋ผ๊ณ ์๊ฐํด๋ณด์.
๋๋ฌด ๋ง๊ธฐ๋ ํ๊ณ ๋ค๋ฅธ ํ์ผ์์ ๋ถ๋ฌ์ธ ์๋ ์๋ค.
์ปดํฌ๋ํธ๋ฅผ ํ์ผ๋ณ๋ก ๋๋ ๋ณด์.
** App.js **
class Content extends Component{
render(){
return(
<article>
<h2>HTML</h2>
HTML is HyperText Markup Language.
</article>
);
}
}
** TOC.js **
import React, {Component} from 'react'; -> ์ด๊ฑธ ์์ผ๋ก์จ component๋ฅผ ๋ถ๋ฌ์จ๋ค.
class TOC extends Component{
render(){
return (
<nav>
<li><a href="1.html">HTML</a></li>
<li><a href="2.html">CSS</a></li>
<li><a href="3.html">Javascript</a></li>
</nav>
);
}
}
export default TOC;
TOC๋ผ๋ ํด๋์ค๋ฅผ ์ธ๋ถ์์ ๊ฐ๋ค์ธ์ ์๊ฒ ํด์ค
import TOC from "./components/TOC";
์ธ๋ถ์์ TOC๋ฅผ ๊ฐ๋ค ์ธ ์ ์๊ฒ ๋จ
** Content.js **
import React, {Component} from 'react';
class Content extends Component{
render(){
return(
<article>
<h2>{this.props.title}</h2>
{this.props.desc}
</article>
);
}
}
export default Content;
๋ค๋ฅธ ํ์ผ์์ ์ฌ์ฉ ์ :
import Content from "./components/Content";
ํ์ํ ์ปดํฌ๋ํธ๋ฅผ ๋น ๋ฅด๊ฒ ์ฐพ์ ์ ์๋ค.
๐ฎ๊ฐ์ธ์ ์ธ ๊ถ๊ธ์ฆ
์ฒ์ ํด๋์ค ์ ์ธ ์ ์ render()๋ฅผ ์ฐ๋ ๊ฑธ๊น?
-> render()๋ฅผ ์ฌ์ฉํ๋ฉด ๊ทธ ๊ฒฐ๊ณผ๋ ์ค์ dom์ ์๋ฏธํ์ง ์๊ณ ๊ทธ ํํ๋ฅผ ๋ณธ๋ด ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค.
-> ์ฐธ๊ณ ์ฌ์ดํธ
https://seungddak.tistory.com/166
-> ์คํฐ๋ ํ ์ ๋ช ๋์ ๋ต๋ณ
๋ฆฌ์กํธ -> ๊ฐ์ domํ์ฉ
div ์์ ๋ด์ฉ๋ค์ dom์ ํํ๋ฅผ ๋๊ณ ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ํํ๋ฅผ ๋ฐํํ๋ค
html์ ์ ์ ์ธ ๊ฒ๋ค์ js react๋ฅผ ์ด์ฉํด์ ๋์ ์ธ ํ์ด์ง๋ฅผ ๋ง๋ค ์ ์๋ค
์ํฉ๋ณ๋ก ๋ ๋๋ง์ด ๊ฐ๋ฅํด์ง๋ค
ex) ๋ก๊ทธ์ธ ์ฐฝ์์ ์์ด๋ ์
๋ ฅ ์ํ์ ๋ ์์ด๋ ์
๋ ฅํ๋ผ๊ณ ๋์ค๋ ํ๋ฉด๋ react๋ฅผ ์ด์ฉํ ๊ฒ์.