๐ ๊ฐ๋ฐ ๊ณต๋ถ 3๊ฐ์ ์ฐจ์ธ to-be ๊ฐ๋ฐ์์ ์์ต ๋ธ๋ก๊ทธ๐๏พ Oct 17 ~ 23, 2021
ํ์ฌ ์ํ
class์ function์ ๋ฐ๋ก ํ์ตํ๋๋ฐ, ๊ฐ์ด ๋๊ณ ๋น๊ตํ๋ฉด์ ํ์ตํด์ผ ๊ฐ๋ ์ด ๋ ์ ์กํ ๊ฒ ๊ฐ์์.
๋ฆฌ์กํธ๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ ๋ค.
ํด๋์ค & ํจ์!
์์ ์๋ ํจ์ ์คํ์ผ๋ก state๋ฅผ ๊ด๋ฆฌํ์ง ๋ชปํ๊ณ ์ปดํฌ๋ํธ ์์ฑ ๋ณ๊ฒฝ ์๋ฉธ์ ๋ํ ์ด๋ฒคํธ์ธ ๋ผ์ดํ์ฌ์ดํด api๋ ์ฌ์ฉํ ์ ์์์
๊ทธ๋์ ํจ์ ์คํ์ผ์ ์์ ์ปดํฌ๋ํธ๊ฐ ์ํค๋ ์ผ๋ง ์ฒ๋ฆฌํ๋ ๋จ์ ์ปดํผ๋ํธ์๋ง ์ฌ์ฉ๋์์์
ํ์ง๋ง hooks ๋๋ถ์ ํจ์ ๋ฐฉ์์์๋ ๋ด๋ถ์ ์ผ๋ก state๋ฅผ ๋ค๋ฃฐ ์ ์๊ฒ ๋์๊ณ lifecycle ์์ ๋ ์ฒ๋ฆฌํ ์ ์๊ฒ ๋์์
ํจ์๊ฐ ํด๋์ค๋ ๋๋ฑํด์ง ๊ฒ์
๊ฒ๋ค๊ฐ ํจ์์ ๊ฐํธํจ์ ๊ทธ๋๋ก ์ด์ด๋ฐ๊ธฐ ๋๋ฌธ์ ๋ ๊ฐ๋ ฅํด์ง
ํ์ง๋ง ํด๋์คํ์ ์ฅ์ ๋ ์์ด์ ๋ฆฌ์กํธ๊ฐ ๋งํ๊ธธ ์์ผ๋ก๋ ํด๋์คํ์ ์ง์ํ๋ค๊ณ ํจ
ํด๋์คํ์ ํตํด ํจ์ํ์ ๋ ์ ์ดํดํ๊ณ , ํจ์ํ์ ํตํด ํด๋์คํ์ ๋ ์ ์ดํดํ ์ ์์
(+) npx create-react-app .
ํ์ฌ ๋๋ ํ ๋ฆฌ์ ๋ฆฌ์กํธ ์ดํ๋ฆฌ์ผ์ด์
ํ๊ฒฝ ๊ตฌํ
ํจ์ํ์ return ๊ฐ๋ง ๋ง๋ค์ด ์ฃผ๋ฉด ๊ทธ๊ฒ ๊ณง ์ค์ ํ๋ฉด์ด ๋๋ค.
ํด๋์คํ์ render๋ผ๋ ํจ์๋ฅผ ์จ์ ๊ทธ return ๊ฐ์ด ํ๋ฉด์ด ๋๋ค.
์ฆ ํจ์ํ์ ์๊ธฐ ์์ ์ด render์ธ ๊ฒ์ด๋ค.
import React from 'react'
imoprt './App.css'
function App() {
return (
<div className="container">
<h1>Hello, world!</h1>
<FuncComp></FuncComp>
<ClassComp></ClassComp>
</div>
);
}
// โ function style component
function FuncComp(){
return (
<div className="container">
<h2>function style component</h2>
</div>
);
}
// โ class style component
class ClassComp extends React.Component{
render(){
return (
<div className="container">
<h2>class style component</h2>
</div>
)
}
}
export default App;
ํ component์์ state๋ก ๊ด๋ฆฌํ๋ ์ํ ๊ฐ์ ๋ค๋ฅธ component๊ฐ props๋ก ๋ฐ์ ์ฌ์ฉํ๋ค.
props๋ ๋ ๋ฐฉ์ ๋ค ์ฌ์ฉํ๊ณ , state๋ ์๋๋ ํด๋์คํ์์๋ง ์ฌ์ฉํ ์ ์์๋ค๊ฐ ์ด์ ๋ฐ๋ ๊ฒ์.
์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์๋์ ๊ฐ๋ค.
1) ๋ฐ๋ก props๋ก ๋ฐ์์ค๊ธฐ (๐ด : ์ ์ฝ๋์์ ์๋ก ์ถ๊ฐํ ๋ถ๋ถ. props ๊ฐ์ ๊ทธ๋๋ก Number ์์ ์ฐ์)
ํด๋์คํ์ this.props.~, ํจ์ํ์ ๋งค๊ฐ๋ณ์ ๋ง๋ค๊ณ props.~
import React from 'react';
imoprt './App.css';
function App() {
return (
<div className="container">
<h1>Hello, world!</h1>
<FuncComp ๐ดinitNumber={2}></FuncComp>
<ClassComp ๐ดinitNumber={2}></ClassComp>
</div>
);
}
// โ function style component
function FuncComp(๐ดprops){ // ๋งค๊ฐ๋ณ์๋ช
์ ๋ค๋ฅธ ๊ฑธ๋ก ํด๋ ๋์ง๋ง ๋ณดํต props๋ก ํจ
return (
<div className="container">
<h2>function style component</h2>
๐ด<p>Number : {props.initNumber}</p>
</div>
);
}
// โ class style component
class ClassComp extends React.Component{
render(){
return (
<div className="container">
<h2>class style component</h2>
๐ด<p>Number : {this.props.initNumber}</p>
</div>
)
}
}
export default App;
2) state๋ฅผ ํตํด ๋ฐ์์ค๊ธฐ
ํจ์ํ์์๋ ๋ชปํจ
(๐ด : ์ ์ฝ๋์์ ์๋ก ์ถ๊ฐํ ๋ถ๋ถ. props ๊ฐ์ ๊ทธ๋๋ก Number ์์ ์ฐ์)
import React from 'react';
imoprt './App.css';
function App() {
return (
<div className="container">
<h1>Hello, world!</h1>
<FuncComp initNumber={2}></FuncComp>
<ClassComp initNumber={2}></ClassComp>
</div>
);
}
// โ function style component
function FuncComp(props){
return (
<div className="container">
<h2>function style component</h2>
<p>Number : {props.initNumber}</p>
</div>
);
}
// โ class style component
class ClassComp extends React.Component{
๐ดstate = {
number:this.props.initNumber
}
render(){
return (
<div className="container">
<h2>class style component</h2>
<p>Number : {๐ดthis.state.number}</p>
</div>
)
}
}
export default App;
React 16.8๋ถํฐ ์ถ๊ฐ๋์๋ค.
ํจ์ํ ์ปดํฌ๋ํธ์ hook ์ฌ์ฉํ๊ธฐ
React์ ๋ด์ฅ๋ Hook์ ์ฌ์ฉํด๋ ๋๊ณ , ๋ด๊ฐ ์ง์ ๋ง๋ค์ด์ ์จ๋ ๋๋ค.
hook์'use'๋ก ์์๋๋๋ฐ, ์ด๋ ํ์ด์ค๋ถ์ด ์ ๊ณตํ๋ ๋ด์ฅ๋ ํ
์ด๋ค.
โ ํด๋์คํ
state = {
number:this.props.initNumber
}
ํด๋์คํ ์ปดํฌ๋ํธ์ ํ๋ ์ ์์ ์ ํจ์ํ ์ปดํฌ๋ํธ์ ๋๊ฐ์ด ํ๊ธฐ
import React๐ด, {useState} from 'react';
imoprt './App.css';
function App() {
return (
<div className="container">
<h1>Hello, world!</h1>
<FuncComp initNumber={2}></FuncComp>
<ClassComp initNumber={2}></ClassComp>
</div>
);
}
// โ function style component
function FuncComp(props){
๐ดlet numberState = useState(props.initNumber); // useState๋ฅผ ํธ์ถํ๋ ๊ทธ ๊ฐ์ numberState๋ก ์ค์
๐ดlet number = numberState[0];
return (
<div className="container">
<h2>function style component</h2>
<p>Number : {props.initNumber}</p>
</div>
);
}
// โ class style component
class ClassComp extends React.Component{
state = {
number:this.props.initNumber
}
render(){
return (
<div className="container">
<h2>class style component</h2>
<p>Number : {this.state.number}</p>
</div>
)
}
}
export default App;
useState๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฌด์กฐ๊ฑด ๋ฐฐ์ด์ด return๋๊ณ ๊ทธ ๋ฐฐ์ด์ ๋ ๊ฐ์ ๊ฐ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
numberState = useState(props.initNumber);๊ฐ returnํ ๋ฐฐ์ด์ ์ฒซ ๋ฒ์งธ ์๋ฆฌ๊ฐ state ์ญํ ์ ํ๋ ์ด๊ธฐ ๊ฐ์ด๋ค.
์ ๋ฆฌ
ํจ์ํ์์ state๋ฅผ ๋ง๋ค๊ณ ์ถ๋ค๋ฉด useState์ ๊ฐ์ ์ ๋ฌํ๋ฉด ๋๋ค. ๊ทธ ๊ฐ์ด ์ด๊ธฐ ๊ฐ์ด ๋๋ค.
ํด๋์คํ์์๋ setState๋ก state๋ฅผ updateํ์ง๋ง ํจ์ํ์์๋ useStat์ ๋ ๋ฒ์งธ ๊ฐ์ด ๊ทธ ์ญํ ์ ๋์ ํ๋ค.
โ ํด๋์คํ
<input type="button" value="random" onClick={
function(){
this.setState({number:Math.random()})
}.bind.(this)
}></input>
โ ํจ์ํ
<input type="button" value="random" onClick={
function(){
setNumber(Math.random());
}
}></input>