์ฃผ์๊ฐ๋
๐ฏ๏ธ
- react์ ํ์์ฑ : component๋ฅผ ์ฌ์ฉํด์ html์ฒ๋ผ ์์ฑํ๋ ค๋ ๊ฒฝ์ฐ์ ํ์ / ์ด๋ฅผ ์ํด react๋ JSX ๋ฌธ๋ฒ์ ์ฌ์ฉ
component
- html์ ๋ฐํํ๋ ํจ์
- js์ ํจ์์ฒ๋ผ ์ฌ์ฌ์ฉ์ฑ์ด ๋์
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
ReactDOM.render(
<App />,
document.getElementById('root')
);
- ์๋์ ๊ฐ์ด, ๋๊ฐ์ Component๋ฅผ ๋ ๋๋งํ ์๋ ์์ โ๏ธ
ReactDOM.render( <App /> <Potato />, document.getElementById('root'));
- react application์ ํ ๋ฒ์ ํ๋์ Component๋ง ๋ ๋๋งํจ
- ๋ฐ๋ผ์ (๊ธฐ์ค์ด ๋๋) ํ๋์ application์์, ๋ง์ Component๋ฅผ ๋ฃ์ ์ ์์ -> ํด๋น ํ์ผ์์ ๋ถ๋ฌ์ด
- ๊ทธ๋ฆฌ๊ณ ์ด๋ฌํ Component์์ ๋ ๋ง์ Component๋ฅผ importํ ์ ์์
- like this
import React from "react"
import Potato from "./Potato"
function App() {
return (
<div className="App">
<Potato/>
Hello Willyโค๏ธ!
</div>
);
}
export default App;
JSX๋ก Component์ ์ ๋ณด๋ฅผ ๋ณด๋ผ ์ ์๋ค
- App component์์ Food component๋ก ์ ๋ณด๋ฅผ ๋ณด๋ด๊ณ
Food component์์ ๋ฐ์ ์ ๋ณด๋ฅผ ์ด๋ป๊ฒ ์ฌ์ฉํ ๊น?
<Food / name = "kimchi">
์ ๊ฐ์ด ์ปค์คํฐ๋ง์ด์งํ ์์ฑ์ ๋ด์์ ์ฌ์ฉํ๋ค.
=> "/ Food ์ปดํฌ๋ํธ์ / name์ด๋ผ๋ property name์ ์ฌ์ฉํด์ / "kimchi"๋ผ๋ value๋ฅผ ์ฃผ๊ฒ ๋ค."๋ ์๋ฏธ
import React from "react"
function Food (props) {
console.log(props)
console.log(props.lala)
console.log({name})
return (
<h1> i like {props}</h1>
<h1> i like {props.lala}</h1>
<h1> i like {props.lala[3]}</h1>
<h1> i like {name}</h1>
)
}
function App() {
return (
<div className="App">
hello willyโค๏ธ!
<Food
name = "kimchi"
something = {false}
lala = {[1,2,3,"jung", "eun"]}
/>
</div>
);
}
export default App;
class component
class App extends React.Component {
constructor(props) {
super(props)
}
render() {
return (
<div>Hello Willy๐๏ธ</div>
)
}
}
constructor
- component๋ฅผ ์์ฑํ ๋, state ๊ฐ์ ์ด๊ธฐํํ๊ฑฐ๋ or ๋ฉ์๋๋ฅผ ๋ฐ์ธ๋ฉํ๊ธฐ์ํด ์ฌ์ฉํ๋ค.
- react component์ ์์ฑ์(
constructor
)๋ ํด๋น component๊ฐ ๋ง์ดํธ๋๊ธฐ ์ ์ ํธ์ถ๋๋ค.
- ๋ํ, React.Component๋ฅผ ์์ํ ์ปดํฌ๋ํธ(App)์ ์์ฑ์(constructor)๋ฅผ ๊ตฌํํ ๋๋
super(props)
์ ์ธ์ ํด์ผํ๋ค. / super(props)
๋ก ์์์ ๋ฐ์์จ๋ค.
- ์ด์ ๋?
super()
์ ์ this
๋ ํ์ฉ๋์ง ์์ผ๋ฉฐ, super()
๊ฐ ๋ถ๋ฆฌ์ง ์์ผ๋ฉด, this
๊ฐ ์ด๊ธฐํ๋์ง ์๋๋ค.
- ์ด์ ๋? this.props๋ฅผ ์ฌ์ฉํ ๋, ์์ฑ์ ๋ด์์ ์ ์๋์ง ์์ผ๋ฉด ์๋ฌ ๊ฐ๋ฅ์ฑ์ด ํฌ๊ธฐ ๋๋ฌธ์ด๋ค.
this.state
- ์์ฑ์ ๋ด์์
this.state
๋ก ์ด๊ธฐ๊ฐ์ ํ ๋นํ๋ค.
- ์์ฑ์(
constructor(){ _here_ }
) ๋ด์์๋ง this.state
๋ก ์ด๊ธฐ๊ฐ์ ์ง์ ํ ๋นํ ์ ์๋ค.
- ์ด this.state๋ฅผ ๋ณ๊ฒฝํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๊ฒ์ด
setState
์ด๋ค.
- ์์ฑ์ ๋ด์์๋ ์ธ๋ถAPI๋ฅผ ํธ์ถํ ์ ์๊ธฐ ๋๋ฌธ์, ์์ฑ์ ๋ฐ์์
componentDidMount()
๋ฅผ ํตํด์ ํด์ค ์ ์๋ค.
- ์๋์ ์์ ๋ฅผ ์ฐธ๊ณ
class App extends React.Component {
constructor(props) {
super(props)
this.state = {
videos : [],
isLoading : true,
queryString: ""
}
this.searchVideo = this.searchVideo.bind(this)
}
componentDidMount () {
this.searchVideo('start')
}
searchVideo (queryString) {
const key = "_๋์ ์ ํ๋ธ API KEY_"
fetch (`https://www.googleapis.com/youtube/v3/search?part=snippet&key=${key}&q=${queryString}&type=video&videoEmbeddable=true&maxResults=10`)
.then(res => res.json())
.then(json => {
this.setState({
videos : json.items,
isLoading : false
})
})
}
}