1>๐fetch ํจ์๋ฅผ ์ฌ์ฉํด API์๋ ํ๊ฒฝ์์ mockd-data๋ฅผ ๊ฐ์ง๊ณ ํ๋ก ํธ ๊ฐ๋ฐํ๋ ๋ฒ๊ณผ 2>๐ปReact Life cycle์ ํตํด ๋ฆฌ์กํธ์ ๋ฉ์๋๋ค์ด ์ด๋ค ์์๋ก ์คํ๋๋์ง์ ๋ํด์ ํํค์ณ๋ณด์ฅ!
Life cycle
์ด๋ ์ด๋ค ์์๋๋ก ๋ฉ์๋๋ค์ด ์คํ๋๋์ง์ ๋ํด์๋ฅผ ๋ค๋ฃจ๋ ๊ฒ์ด๋ค.1> ์์ฑ๋ ๋๋ constructor
, render
ํ์ componentDidMount()
๊ฐ ์คํ๋๋ค.
2> ์
๋ฐ์ดํธ ๋ ๋ 1> ์์์ด ๋ถ๋ชจ๋ก ๋ฐ๋ props๊ฐ ๋ณํ๊ฑฐ๋ 2> setstate๋ฅผ ํตํด state๊ฐ ๋ณ๊ฒฝ๋ ๋ render
๋ค์ ์คํ๋๋ฉด์ ํ๋ฉด์ ๊ทธ๋ ค์ง๊ณ componentdidUpdate()
๊ฐ ์คํ๋๋ค.
3> ์ ๊ฑฐ ๋ ๋ componentWillUnmount()
๊ฐ ์คํ๋๋ค.
- ์ปดํฌ๋ํธ๋
๋ง์ดํธ โ ์ ๋ฐ์ดํธ(๋ฐ๋ณต) โ ์ธ๋ง์ดํธ
์์๋๋ก ์งํ๋๋ค.
- ์ด๋ฌํ ์งํ์ ๋ฐ๋ผ์
๋ผ์ดํ ์ฌ์ดํด ๋ฉ์๋
, 1> componentDidMount() 2.componentdidUpdate 3> componentWillUnmount๋ค์ด ๋ถ๋ ค์ง๊ฒ ๋๋ค.
1. mount
- ์ปดํฌ๋ํธ๊ฐ ์ต์ด์ ๋ถ๋ ค์ง ๋
constructor
โrender
โcomponentDidMount
๊น์ง ์คํ๋๋ค.constructor
์componentDidMount
๋ mount ๋ ๋ ์ต์ด์ ํ ๋ฒ๋ง ์คํ๋๋ method๋ค์ด๋ค.
2. ์ ๋ฐ์ดํธ
- setState ํน์ ์๋ก์ด props๊ฐ ์ ๋ฐ์ดํธ ๋์์ ๋
render
โcomponentDidUpdate
๊ฐ ์คํ๋๋ค.
3. ์ธ๋ง์ดํธ
- ์ปดํฌ๋ํธ๊ฐ ํ๋ฉด์์ ์ฌ๋ผ์ง๋ ์์ ์
componentWillUnmount
๊ฐ ๋ง์ง๋ง์ผ๋ก ์คํ๋๋ค.
<script> import Reat from "react"; class MyComponent extends React.Component { constructor() { console.log(1) this.state = { myNum = 0 } } const increaseNum = () => { console.log(2) this.setState({ myNum = this.state.myNum+1 }) } componentDidMount() { console.log(3) } componentDidUpdate() { console.log(4) } render() { console.log(6) return ( <> <div>๋ผ์ดํ์ฌ์ดํด</div> <div>increaseNum : {this.state.myNum }</div> <button type="button" onClick={this.increaseNum}>์ซ์ ์ฆ๊ฐ</button> </> ); } } export default MyComponent; </script>
์ฌ์ฉ์๊ฐ ๋ฒํผ์ ํด๋ฆญํ๋ฉด ๋ฐ์ํ๋ ๋ฉ์๋์ ์คํ ์์
constructor()
, ์์ฑ์ ํจ์๋ฅผ ํตํด state ๊ฐ ์ด๊ธฐํ ->render()
๋ฅผ ํตํด ํ๋ฉด์ ์ต์ด ๊ทธ๋ ค ํ ->componentDidMount()
์คํ๋๋ค. ->increaseNum()
๋ฒํผ ํด๋ฆญ์ ์ด๋ฒคํธ ํธ๋ค๋ฌ ํจ์ ๋ฐ์ํ๊ณ ->render()
state๊ฐ์ด ๋ณ๊ฒฝ๋์์ผ๋ ๋ฆฌ๋ ๋๋ง ๋์ด ํ ->componentDidUpdate()
๋ ๋๋ง ๋ ํ์ ๋ฐ์ํ๋ค.
- ๋ฐ๋ผ์ 1=> 6=> 3 => 2 => 6=> 4 ์์๋๋ก ์ฝ์๋ก๊ทธ๊ฐ ์ฐํ๋ค.
- ์ฃผ์ ํ ์ ์ state ์ ๋ฐ์ดํธ ๋ ์ ๋ค์ componentDidUpdate ๋ค์ ํธ์ถ๋ ๋ค ๋ฆฌ๋ ๋๊ฐ ๋๋ค๋ ์ !
JSON
์ด๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด ๋ฌธ๋ฒ์ ๋ฐ๋ฅด๋ ๋ฌธ์๊ธฐ๋ฐ์ ๋ฐ์ดํฐ ํฌ๋งท์ด๋ค.- ์๋ฐ์คํฌ๋ฆฝํธ์์๋
JSON
์ ์ฝ๊ฒ ๋ค๋ฃฐ ์ ์๋ค.
Q. JSON ํ์ผ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ฆฌ์กํธ ๋ผ์ดํ ์ฌ์ดํด์์ ์ธ์ ๊ฐ์ ธ์ฌ ์ ์์๊น ๐คทโ?
- A.
componentDidMount
์ fetchํจ์๋ฅผ ๋ฃ์ด์ค๋ค๐โ!
Q. ์ ์์ฑ์ ํจ์์์ fetch ํจ์๋ฅผ ํ๋ฉด ์๋ ๊น ๐ โ?
- A. ์ด์ ๋ ์ง๋ฌธ์ ๋ํ ๋ต ์ฐพ์๋ณด๊ธฐ! ๐โ
์ฐ์ ์ render ํจ์ ์คํ, ์ฆ ํ๋ฉด์ ๊ทธ๋ ค์ง๊ณ ๋์ fetch
ํจ์๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๋ณด์!
-data fatching์ ์ฆ,
fetch
ํจ์์ ์คํ์ *๋น๋๊ธฐ์
์ผ๋ก ์คํ๋์ด์ผ๋ง ํ๋ค.<script> import React, {Component} from 'react' import Card from './Card' export class App extends Component { constructor(props){ super(props); this.state = { products : [] } } componentDidMount() { console.log('componentDidMount') fetch('http://localhost:3000/data/data.json', { method:'GET' }) .then(res => res.json()) .then(data => { this.setState({ products: data.myData }) console.log(data.myData) }) } render() { console.log('render') return ( <div className="contaniner"> <div className="titleWrapper"> <p className="title">๊ธฐ๋ถ์ข์ JAMIE MARKET</p> <p className="subTitle">์ดํน๊ธ ๋ฐฐ์ก JAMIE ROCEKT DELIVERY</p> </div> {this.state.products.map((product, IDX)=>{ return ( <Card key={IDX} img={product.img} name={product.name} price={product.price} /> ) }) } </div> ) } } export default App; </script>
- fetch ํจ์๋ฅผ
componentdidmount() ํจ์
๋ด๋ถ์๋ค๊ฐ ์ ์ด์ค๋ค.
- fatching์ ๋ฐ์์จ ํ์
then ๋ฉ์๋
๋ฅผ ์จ์ fetch๋ก ๋ฐ์์จ ์ธ์๋ฅผ res๋ก ๋ฃ์ด์ฃผ๊ณ ๋ฐ์์จ res๋ฅผjson()
์ ์คํํด ์ฒ๋ฆฌํ๋ค.
- ํ์ํ ๋ฐ์ดํฐ์ ์ ๊ทผํ๊ธฐ ์ํด์๋
dot notation
์ ํ์ฉํด ๊ฐ์ฒด์ ์ ๊ทผ๋ฏ ๋ฐ์ดํฐ์ ์ ๊ทผํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋ด๋๋ค.
๋ฆฌ์กํธ ๋ด ํ๋ฉด์ ๋ณด์ฌ์ง๋ ๊ฒ = state๋ฅผ renderํ ๊ฒ
์ด๊ธฐ ๋๋ฌธ์ ๋ฐ์์จ ๋ฐ์ดํฐ๋ฅผ state์ ๊ฐ์ผ๋ก ๋ฐ์ ๋ค state๋ฅผ map ๋ฉ์๋๋ก ์ํํด์ฃผ๋ฉด ๋๋ค.
- ๊ทธ.๋ฌ.๋โ๏ธ ์ด๋ ๊ฒ map ๋ฉ์๋๋ก ์ํํ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ๋๋ฐ ์๋ฌ ๋ฐ์์ ํญ์ ์๋ฌ์ ๋ฌธ๊ตฌ๋ฅผ ์ ์ฝ์ด๋ณด์!
- ์๋ฌ์ ์์ธ์
state
๊ฐ์ด ๋ฐฐ์ด์ ํํ๊ฐ ์๋๊ธฐ ๋๋ฌธ์ด๋ค. ์ฐ๋ฆฌ๊ฐ map์ ์ฌ์ฉํ ์ ์๋ ์กฐ๊ฑด์ map์ this์ ๋์์ด iterable๊ณผ ๋ฐฐ์ด์ ํํ์ผ๋๋ง ์ด๋ค.- TIP๐ก)
์ฃผ์ ์ฒ๋ฆฌ
๋ฅผ ์ ํ์ฉํ๋ฉด์ ์ฝ๋์ ์๋ฌ ๋ฒ์๋ฅผ ํ์ ํด๋ณด์.
- ์ฃผ์์ฒ๋ฆฌํ๋ฉด
fatch ํจ์
๋ก ๋ฐ์์ ์ ์ฅํstate
๋ฅผ map์ผ๋ก ์ํํ ์ฝ๋๋ถ๋ถ์ด ์๋ฌ์ ๋ฒ์๋ผ๋ ๊ฒ์ ์ฝ๊ฒ ์ ์ ์๋ค.- this.state.product๊ฐ ๋ผ์ดํ ์ฌ์ดํด์ ์ฒซ ๋ ๋์ state์ ๊ฐ์ ๋น ์คํธ๋ง, ''์ผ๋ก ๊ฐ์ ธ์ map์ ์ฌ์ฉํ์ฌ undefied ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
- ์ด๊ธฐ state์ ๊ฐ์ ์คํธ๋ง '', =>
๋น ๋ฐฐ์ด []
๋ก ๋ฐ๊ฟ์ฃผ๋ฉด ์๋ฌ๊ฐ ํด๊ฒฐ๋์ด ๋์ํ๋ค.
- ์๋ฌ ํด๊ฒฐ ๋ค ์ฝ์ ์ฐ์ด๋ณธ ์ํฉ, render ์คํ ๋ค componentDidMount ์คํ๋๊ณ ๋ค์ state ๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์ฌ render๋ ํ fetch ๋ฐ์ jsonํํ ๋ฐ์ดํฐ๊ฐ ์ฐํ๋ค.
- ์์ฑ์ ํจ์ ๋ด๋ถ์ state์ ์ด๊ธฐ๊ฐ์ [], ๋น๋ฐฐ์ด๋ก ์ค์ ํด์ค๋ค.
- ์ต์ด ๋ ๋์์ ๋น ๋ฐฐ์ด์ map ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋น ๋ฐฐ์ด์ ์ํํ๋ค.
- ์ดํ
componentdidmount()
ํจ์๊ฐ ์คํ๋์ดfetch ํจ์
๋ก ๋ฐ์์จ ๋ฐ์ดํฐ๋ฅผ setstate๋ฅผ ํตํด state์ ๊ฐ์ ๋ณ๊ฒฝ์์ผ์ค๋ค.- state ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด
componentdidUpdate()
๊ฐ ์คํ๋์ด ์ ๋ฐ์ดํธ ๋ ์ดํrender
ํจ์๊ฐ ์ฌ์คํ๋๋ฉด์ ๋ณ๊ฒฝ๋ state๊ฐ ํ๋ฉด์ ๊ทธ๋ ค์ง๋ค.
- fetch ํจ์๋ฅผ ์ฌ์ฉํด mock-data๋ฅผ ๋ฐ์์ ๊ตฌํํ ์ด๋ฏธ์ง
์ฃผ์๐ซ) JSON ํ์ผ์ ์๋ ํค์ ์ ๊ทผ์ ํ์ฌ ํค์ ๊ฐ์ ๋ด์ผ๋ฉด undefined
๊ฐ ๋์จ๋ค.
- ๋ฐ๋ผ์ ๋ฐฑ์๋์์ API๋ฅผ ๋ณ๊ฒฝํ๊ฑฐ๋ ์ธ๋ถ์ ์ํด์ ๋ณ๊ฒฝ์ฌํญ์ด ์๊ฒผ์๋ ๋ด๊ฐ ๊ด๋ฆฌํ๋ ์ฝ๋์ ์ด๋ค ๊ฒ์ ๋ณํ๋ฅผ ์ฃผ์ด์ผํ๋์ง์ ๋ํด์ ์ ์์์ผํ๋ฉฐ ๋์ฒํด์ผํ๋ค.
- ์ด๋ฌํ ๋ณํ์ ๋์ฒํ๊ธฐ ์ํด์ ์๋ฌ ์ฒ๋ฆฌ, ์์ธ ์ฒ๋ฆฌ์ ๋ํ ๋ก์ง์ ๊ตฌํํด์ค์ผํ๋ค.
EX> if ์กฐ๊ฑด๋ฌธ์ ์ฌ์ฉํด map ๋ฉ์๋๊ฐ ๋น๋ฐฐ์ด์ด ์๋ ๋๋ง ์คํํด์ค๋์ง
EX2> ์ต์ ๋์ฒด์ด๋์ ํตํด ๋น๋ฐฐ์ด์ด๋ null์ด ๋ค์ด์ค๋ ๊ฒ์ ๋ฐฉ์งํด์ค๋ค๋์ง ๋ฑ..
1> JSON ()
2> JSON.stringify - ๊ฐ์ฒด๋ฅผ json ํฌ๋งท์ ๋ฌธ์์ด๋ก ๋ณํํด์ค๋ค. JSON.stringfy(obj, null, 2) 2์นธ์ฉ ๋ค์ฌ์ฐ๋ฉฐ ๋ฌธ์์ด๋ก๋ณํํด์ค๋ค
3> JSON.parse() ๊น์ง - json ํฌ๋งท์ ๋ฌธ์์ด์ ๊ฐ์ฑํ ํ๊ฐ.
- ์ฐ์ ๊ธฐ์กด์ ํ๋ ์์ํฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋์ํ๋ ๊ฒ์ ์ตํ๊ณ ๋์ ๋ค์์ ์ถ๊ฐ ๊ฐ๋ ๊ณต๋ถํ๊ธฐ
- fetch ํจ์๋ฅผ ํตํด ๋ฆฌ์กํธ์ ๋ผ์ดํ ์ฌ์ดํด์ ์จ๋ณด๋ฉฐ ์ด๋ ์์ ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ผํ ์ง ํ์ ํด๋ณด๊ณ
๊ธฐ์กด ํ๋ ์์ํฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ตํ ๋ค ์ถ๊ฐ์ ์ธ ๊ฐ๋ ๋ค JSON(), JSON.stringfy, JSON.parse()๊ณผ ๊ฐ์ ํค์๋๋ค์ ๋ํด์ ์ ๋ฆฌํด๋ณด์์
- ์์ฝ๋ ์ฅํ๋์ ๊ฟํ์ด ๋์น๋ ๊ฐ์ ์ค :}