[React] ์ฃผ์š”๊ฐœ๋… ๐Ÿ’ฏ๏ธ

jungeundelilahLEEยท2021๋…„ 1์›” 7์ผ
0

React

๋ชฉ๋ก ๋ณด๊ธฐ
3/24

์ฃผ์š”๊ฐœ๋… ๐Ÿ’ฏ๏ธ

  • react์˜ ํ•„์š”์„ฑ : component๋ฅผ ์‚ฌ์šฉํ•ด์„œ html์ฒ˜๋Ÿผ ์ž‘์„ฑํ•˜๋ ค๋Š” ๊ฒฝ์šฐ์— ํ•„์š” / ์ด๋ฅผ ์œ„ํ•ด react๋Š” JSX ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉ

component

  • html์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜
  • js์˜ ํ•จ์ˆ˜์ฒ˜๋Ÿผ ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋†’์Œ
// src/index.js
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';

ReactDOM.render(
  <App />, 
  // ์ด๊ฒŒ ๋ฐ”๋กœ Component (์ด๋ ‡๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž„)
  document.getElementById('root')
);
  • ์•„๋ž˜์™€ ๊ฐ™์ด, ๋‘๊ฐœ์˜ Component๋ฅผ ๋ Œ๋”๋งํ•  ์ˆ˜๋Š” ์—†์Œ โŒ๏ธ
ReactDOM.render( <App /> <Potato />, document.getElementById('root'));
  • react application์€ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ Component๋งŒ ๋ Œ๋”๋งํ•จ
  • ๋”ฐ๋ผ์„œ (๊ธฐ์ค€์ด ๋˜๋Š”) ํ•˜๋‚˜์˜ application์•ˆ์—, ๋งŽ์€ Component๋ฅผ ๋„ฃ์„ ์ˆ˜ ์žˆ์Œ -> ํ•ด๋‹น ํŒŒ์ผ์—์„œ ๋ถˆ๋Ÿฌ์˜ด
  • ๊ทธ๋ฆฌ๊ณ  ์ด๋Ÿฌํ•œ Component์•ˆ์— ๋” ๋งŽ์€ Component๋ฅผ importํ•  ์ˆ˜ ์žˆ์Œ
  • like this
// src/App.js
import React from "react"
import Potato from "./Potato" 	// Potato๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด import

function App() {
  return (
    <div className="App">
    <Potato/>
      Hello Willyโค๏ธ!
    </div>
  );
}

export default App;		// App์„ ๋‚ด๋ณด๋‚ด๊ธฐ ์œ„ํ•ด export

JSX๋กœ Component์— ์ •๋ณด๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค

  • App component์—์„œ Food component๋กœ ์ •๋ณด๋ฅผ ๋ณด๋‚ด๊ณ 
    Food component์—์„œ ๋ฐ›์€ ์ •๋ณด๋ฅผ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ• ๊นŒ?
    <Food / name = "kimchi"> ์™€ ๊ฐ™์ด ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•œ ์†์„ฑ์— ๋‹ด์•„์„œ ์‚ฌ์šฉํ•œ๋‹ค.
    => "/ Food ์ปดํฌ๋„ŒํŠธ์— / name์ด๋ผ๋Š” property name์„ ์‚ฌ์šฉํ•ด์„œ / "kimchi"๋ผ๋Š” value๋ฅผ ์ฃผ๊ฒ ๋‹ค."๋Š” ์˜๋ฏธ
// src/App.js

import React from "react"

function Food (props) { 	// props๋Š” obj
// ์ธ์ž๋กœ ๐Ÿ‘‰๏ธ {name} or props.name or props ์ฒ˜๋Ÿผ~ ํŽธํ•œ ๋ฐฉ์‹์œผ๋กœ!
  console.log(props) 		// {name: "kimchi", something: true, lala: Array(5)}
  console.log(props.lala) 	// [1, 2, 3, "jung", "eun"]
  console.log({name}) 		// {name: "kimchi"}

  return (
  <h1> i like {props}</h1> 	// ์ด ๊ฒฝ์šฐ, ๊ฐ์ฒด๊ฐ€ react child๋กœ ์œ ํšจํ•˜์ง€ ์•Š๋‹ค๋Š” ์—๋Ÿฌ๊ฐ€ ๋œฌ๋‹ค.
  <h1> i like {props.lala}</h1> // i like 123jungeun // ๋ฐฐ์—ด์˜ el๋“ค์ด ๋ชจ๋‘ string type์œผ๋กœ ์ถœ๋ ฅ๋œ๋‹ค.
  <h1> i like {props.lala[3]}</h1> // i like jung // ๋„˜๊ฒจ์ฃผ๋Š” ๋ฐ์ดํ„ฐ์—์„œ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
  <h1>  i like {name}</h1> 	// i like kimchi
  )
}

function App() {
  return (
    <div className="App">
      hello willyโค๏ธ!
      <Food 
        name = "kimchi"
        something = {false}
        lala = {[1,2,3,"jung", "eun"]}
        />
        // Food ์ปดํฌ๋„ŒํŠธ์— / name์ด๋ผ๋Š” property name์„ ์‚ฌ์šฉํ•ด์„œ / "kimchi"๋ผ๋Š” value๋ฅผ ์ฃผ๊ฒ ๋‹ค.
    </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') // App.searchVideo
  }
  // searchVideo ์˜ ๋‚ด์šฉ์ด ๊ธธ์–ด์„œ ๋”ฐ๋กœ ๋นผ์คŒ
  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
      })
    })
  }
}
profile
delilah's journey

0๊ฐœ์˜ ๋Œ“๊ธ€