반응형
반응형

안녕하세요. PSYda 입니다.

본 포스팅은 Nomad Coders 의 "React JS로 웹서비스 만들기"를 통해 학습한 내용을 정리한 것입니다.

이번 포스팅에서는 지금까지 배운 내용을 바탕으로 실제 여기 형태를 가지는 Movie App을 만들어 볼 예정입니다. 세부적으로 알아볼 내용은 아래와 같습니다.


  1. API로 부터 Movie 데이터 가져오기
  2. Movies App 화면에 띄우기
  3. Movies App에 스타일 입히기
  4. Github page에 Movie App 표시

1. API로 부터 Movie 데이터 가져오기

Javascript를 이용해 외부의 데이터를 가지고 오는 방법에는 jquery, fetch, Axios 등의 방법이 있는데, 그 중 Axios를 이용하겠습니다.

1.1 Axios

1) Axios 설치

  • cmd(터미널) 창에서 npm i axios 입력
movie_app_2019>npm i axios

2) Axios import

import axios from "axios"

1.2 API(yts) 사용하기

1) Data를 가져올 API URL 정보

2) Axios를 이용해 Data 가져오기

//App class
  getMovies = async () => {
    const { data: { data: { movies }}} = await axios.get("https://yts-proxy.now.sh/list_movies.json?sort_by=rating");list_movies.json");
  }
  componentDidMount(){
    this.getMovies();
  }
  • getMovies 라는 함수를 비동기 방식(async, await)으로 생성
  • getMovies 함수에서 movies라는 변수에 가져온 영화 데이터 저장
  • movies 라는 데이터는 data 안의 data 안에 있음.
  • rending 후에(componentDidMount함수에서) getMovies 함수 실행

2. Movies Rendering

2.1 Movie Component 생성

Movie 데이터를 rendering 하기 위한 Component를 생성합니다.

//Movie.js
import React from "react"
import PropTypes from "prop-types"

function Movie({ id, year, title, summary, poster, genres }) {
  return <h5>{title}</h5>
}

Movie.propTypes = {
  id: PropTypes.number.isRequired,
  year: PropTypes.number.isRequired,
  title: PropTypes.string.isRequired,
  summary: PropTypes.string.isRequired,
  poster: PropTypes.string.isRequired,
  genres: PropTypes.arrayOf(PropTypes.string).isRequired,
}

export default Movie

1) props 설정

function Movie({id, year, title, summary, poster, genres})
  • id, year, title, summary, poster 를 props로 받음

2) title을 rendering

return <h5>{title}</h5>

3) PropTypes를 이용해 props의 type check

Movie.propTypes = {
  id: PropTypes.number.isRequired,
  year: PropTypes.number.isRequired,
  title: PropTypes.string.isRequired,
  summary: PropTypes.string.isRequired,
  poster: PropTypes.string.isRequired,
  genres: PropTypes.arrayOf(PropTypes.string).isRequired,
}
  • id, year 는 숫자형
  • title, summary, poster 는 string 형
  • genres는 array형

2.2 state 사용

가져온 movies 데이터를 state에 저장합니다.

1) state 생성

//App Class
state = {
  isLoading: true,
  movies: [],
}
  • movies : [] 라는 state Object 정의

2) state 저장

//App class
getMovies = async () => {
  const {
    data: {
      data: { movies },
    },
  } = await axios.get(
    "https://yts-proxy.now.sh/list_movies.json?sort_by=rating"
  )
  this.setState({ movies, isLoading: false })
}
  • 가져온 데이터(movies) 를 State에 저장
  • movies : movies 를 써야하나 위와 같이 movies 형태로 사용 가능

2.3 Rendering

state에 값이 저장되면 rendering 을 시작합니다.

//App class
  render(){
    const { isLoading, movies } = this.state;
    return (
    <div>
      { isLoading ? "Loading..." : movies.map( movie => (
        <Movie
          key={movie.id}
          id={movie.id}
          year={movie.year}
          title={movie.title}
          summary={movie.summary}
          poster={movie.medium_cover_image}
          genres = {movie.genres} />
    )) }</div>);

1) 최초 rendering

  • isLoading 은 True 이기 때문에 "Loading..." 을 출력

2)State에 저장

  • isLoading 이 False 로 변경됨
  • 조건문에 따라 movies.map() 함수가 실행

3) Movie Component를 사용

2.4 동작 확인

3. Movie App Styling

3.1 Movie App 의 구조화

위에서 작성한 Movie App은 단순히 데이터만 들어가 있기 때문에 Style을 입히기 힘듭니다. HTML Tag와 Class를 이용해 구조화 해줌으로서 CSS 파일을 이용해 Styling 할 수 있습니다. 여기서 HTML 의 class 를 JSX에서 사용할 때는 className 을 써야합니다.

위의 Component의 return 부분을 수정하여 구조화 된 형태로 변경하겠습니다.

1) Movie Component의 return 변경

//Movie Component
function Movie({ id, year, title, summary, poster }) {
  return (
    <div className="movie">
      <img src={poster} alt={title} title={title} />
      <div className="movie__data">
        <h3 className="movie__title">{title}</h3>
        <h5 className="movie__year">{year}</h5>
        <ul className="genres">
          {genres.map((genre, index) => (
            <li key={index} className="genres__genre">
              {genre}
            </li>
          ))}
        </ul>
        <p className="movie__summary">{summary}</p>
      </div>
    </div>
  )
}
  • genres는 array형태 이기 때문에 map 함수를 이용해 li 태그 생성

2) App Component render함수의 return 변경

//App Component render 함수
 render(){
    const { isLoading, movies } = this.state;
    return (
    <section className ="container">
      { isLoading
      ? <div className = "loader">
        <span className="loader__text">Loading...</span>
        </div>
      :(
        <div className = "movies">
          {movies.map(movie =>
          (
            <Movie
              key = {movie.id}
              id = {movie.id}
              year = {movie.year}
              title = {movie.title}
              summary = {movie.summary}
              poster = {movie.medium_cover_image}
              genres = {movie.genres}
            />
          )
          )
          }
        </div>
      )}
      </section>);
  }

3) 동작 확인

3.2 css 파일로 Movie App Styling

1) css 파일 생성

  • Movie.css 파일 생성
  • App.css 파일 생성

2) css 파일 import

  • Movie.js 에서 상단에 import "./Movie.css" 입력
  • App.js 에서 상단에 import "./App.css" 입력

3) css 파일에 Style 내용 입력
입력한 css 내용은 아래 github 에서 참고하실 수 있습니다.

3.3 동작 확인

3.4 기타 작업

위의 결과물을 확인해보면 summary 글자 수의 차이에 따라 영화 소개 박스의 크기가 차이 나는 것을 확인 할 수 있습니다. 이는 slice 라는 함수를 통해 summary 의 글자 수를 고정함으로서 해결할 수 있습니다.

1) slice를 통한 string 의 글자수 고정

//Movie function(component)의 return
<p className="movie__summary">{summary.slice(0, 140)}</p>

2) 최종 결과물 확인

4. Github page 에 Movie App 표시

Github에서 우리가 만든 Movie App을 화면에 표시할 수 있습니다. 이는 온라인 상에서 다른 사람이 우리가 만든 결과물을 볼 수 있음을 의미합니다. 그 방법에 대해 알아보겠습니다.

4.1 gh-pages 설치

Github page 에 표시하기 위해서는 gh-pages를 설치해야합니다.

  • cmd(터미널)에서 npm i gh-pages
movie_app_2019>npm i gh-pages

4.2 package.json 수정

1) homepage 설정

//package.json
"homepage":"https://psyssai.github.io/movie_app_2019"
  • psyssai 대신 본인의 github ID 입력
  • movie_app_2019 대신 본인의 react project 명 입력

2) scripts에 내용 추가

//package.json
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "deploy": "gh-pages -d build",
    "predeploy": "npm run build"
  }
  • deploy 와 predeploy 내용 추가

3) movie_app 빌드

  • cmd(터미널)에서 npm run build 입력
movie_app_2019>npm run build

4) movie_app을 github page에 발행

  • cmd(터미널)에서 npm run deploy" 입력
movie_app_2019>npm run deploy
  • scripts에 따라 predeploy(npm run build) 가 먼저 실행됨
  • 그 후에 script의 deploy(gh-pages -d build) 가 실행

5) github사이트에서 결과물 확인

감사합니다.

반응형

'FrontEnd > React' 카테고리의 다른 글

[React]3.State & Component Life Cycle  (0) 2021.03.15
[React]2.Component, JSX, Props  (0) 2021.03.15
[React]1.React 소개와 설치  (0) 2021.03.15
[React 기초] 0. 개요  (0) 2019.08.16
반응형

안녕하세요. PSYda 입니다.

본 포스팅은 Nomad Coders 의 "React JS로 웹서비스 만들기"를 통해 학습한 내용을 정리한 것입니다.

이번 포스팅에서 알아볼 내용은 아래와 같습니다.


  1. Class Component
  2. State
  3. Component LifeCycle

1. Class Component

Component는 함수 Component와 Class Component과 있으며, 이전 포스팅에 이어 이번에는 Class Component에 대해 알아보겠습니다.

1.1 Class Component 생성

//App.js
import React from "react"

class App extends React.Component {
  render() {
    return <div>Hello</div>
  }
}

export default App

1) react import

import React from "react"

2) React.Component Class로 부터 상속받은 App Class(Component) 생성

class App extends React.Component {}

3) render 함수의 return에 rendering 할 내용을 JSX로 작성

render(){ return <div>Hello</div> }

4) Component export

export defualt App;

2.State

  • State = Object
  • Component 내부에서 동적인 데이터를 다루고 싶을 때 사용
  • State가 변경되면 자동으로 render 함수 수행

2.1 State 생성 및 사용

//App Class
class App extends React.Component {
  state = { count: 0 }
  render() {
    return <div>The number is {this.state.count}</div>
  }
}

1) State 만들기

  • Class 내부에 state = { 변수 : 값 }" 형태로 생성
  • 미래에 사용할 모든 변수를 정의할 필요는 없음. 계획단계의 변수만 정의

2) State 사용

  • {this.state.변수명}" 형태로 사용
  • 또는 const {변수명} = this.state" 로 정의하고, 변수명" 을 대신 사용

2.2 State 의 값 변경

  • this.state.count = 1 과 같은 형태로 직접 state를 변경할 수 없음
  • State의 값을 변경하기 위해서는 "setState()" 함수를 반드시 사용!
  • setState를 통해 State의 값이 변경되면 "render() 함수를 자동으로 실행"
  • Virtual DOM 을 통해 "변경된 부분(State가 변한 부분) 만 다시 Rendering"

예제 코드 입니다.

//App Class
class App extends React.Component {
  state = {
    count: 0,
  }

  // add, minus 함수
  add = () => {
    this.setState({ count: this.state.count + 1 })
  }
  minus = () => {
    this.setState({ count: this.state.count - 1 })
  }

  // render 함수
  render() {
    return (
      <div>
        <h1>The number is : {this.state.count}</h1>
        <button onClick={this.add}>Add</button>
        <button onClick={this.minus}>Minus</button>
      </div>
    )
  }
}

위의 예제는 두 개의 Button(Add, Minus)을 생성합니다. Add Button을 누르면 State의 Count가 +1, Minus Button을 누르면 State의 Count가 -1 이 됩니다. State가 Undate되면서 render() 함수에 있는 내용이 자동으로 rendering 되어 브라우저에서 변경된 내용을 바로 볼 수 있습니다. 세부적으로 알아보겠습니다.

1) render 함수에 Button 생성

<button onClick="{this.add}">Add</button>
<button onClick="{this.minus}">Minus</button>
  • Add/Minus Button을 클릭(onClick) 하면 add/minus 함수 호출
  • 이벤트 이름 설정시 반드시 camelCase로 작성(onClick, onChange 등)
  • 이벤트에 전달해주는 값은 반드시 함수(함수를 호출 하면 안됨, ex Add())

2) add, minus 함수 생성

add = () => {
  this.setState({ count: this.state.count + 1 })
}
  • setState를 통해 state의 count 값을 update를 하고 rendering 수행

3) 동작 확인

4) 기타 사항

  1. 에서 setState를 통해 state를 변경 할 때 예제와 같이 this.state.count 형태로 사용할 경우 this.state를 한번 더 조회해야 하는 문제를 가지고 있습니다. 그래서 아래와 같이 함수형태로 바꿔서 사용합니다.
add = () => {
  this.setState(current => ({ count: current.count + 1 }))
}

3. Component Life Cycle

React Component 생성(Mounting), 업데이트(Updating), 파괴(Unmounting) 될 수 있습니다.
그 과정에서 호출되는 함수들이 있으며, 호출 시점에 따라 필요한 사용자 코드를 추가할 수 있습니다.

3.1 Mounting

Component가 Mounting 될 때 호출 되는 함수 및 호출 순서는 아래와 같습니다.

  1. cunstructor() : Component 생성자로 가장 먼저 호출

  2. static getDerivedStateFromProps() : 지금 수준에서 몰라도 됨

  3. render() : Rendering 하는 내용 작성

  4. componentDidMount() : Rendering 후에 필요한 내용을 작성

3.2 updating

Component가 변경 될 때 호출 되는 함수 및 호출 순서

  1. static getDerivedStateFromProps() : 지금 수준에서 몰라도 됨

  2. shouldComponentUpdate() : Component 최적화내용 작성

  3. render() : Rendering 하는 내용 작성

  4. getSnapshotBeforeUpdate() : DOM 업데이트 하기 직전에 해야할 내용을 작성

  5. componentDidUpdate() : Redering 후에 필요한 내용을 작성

3.3 unmounting

Component가 unmounting 될 떄 호출 되는 함수 및 호출 순서

  1. componentWillUnmount() : 이벤트 제거 및 기타 사용자 코드 제거 내용 작성

3.4 (Mounting)Life Cycle을 사용한 예제

//App Class
class App extends React.Component {
  state = {
    isLoading: true,
  }
  componentDidMount() {
    setTimeout(() => {
      this.setState({ isLoading: false })
    }, 6000)
  }
  render() {
    const { isLoading } = this.state
    return <div>{isLoading ? "Loading..." : "We are ready"}</div>
  }
}

1) isLoading 은 true

state = { isLoading: true }

2) render함수에서 isLoading에 따라 화면 표시

  render(){
    const { isLoading } = this.state;
    return <div>{ isLoading ? "Loading..." : "We are ready" }</div>;
  }
  • isLoading 이 True 이면 "Loading..." 출력
  • isLoading 이 false이면 "We are ready" 출력

3) componentDidMount() 함수를 이용한 rendering 이후 처리

  componentDidMount(){
    setTimeout( () => {
      this.setState({isLoading:false});
    }, 6000)
  }
  • componentDidMount() 는 render() 함수 이후에 실행됨
  • 6초(6000ms) 후에 state의 isLoading을 false로 변경

4) setState가 실행되어 render() 가 다시 실행

  • isLoading이 false로 변경되었기 때문에 "We are ready" 출력

5) 동작확인

감사합니다.

반응형

'FrontEnd > React' 카테고리의 다른 글

[React]4.영화 App 만들기  (0) 2021.03.15
[React]2.Component, JSX, Props  (0) 2021.03.15
[React]1.React 소개와 설치  (0) 2021.03.15
[React 기초] 0. 개요  (0) 2019.08.16
반응형

안녕하세요. PSYda 입니다.

본 포스팅은 Nomad Coders 의 "React JS로 웹서비스 만들기"를 통해 학습한 내용을 정리한 것입니다.

이번 포스팅에서는 Component와 JSX에 대해 알아볼 예정이며 목차는 아래와 같습니다.


  1. (함수)Component
  2. JSX & props
  3. 동적인 Component 사용(Map함수 이용)
  4. 유효한 Props 인지 Check하기

1. Component

1.1 Component란?

  • HTML을 반환해주는 함수 또는 클래스
  • 함수 컴포넌트와 클래스 컴포넌트가 있음
  • 독립적인 단위로서 재사용성이 높음

1.2 Component 만들기

별도의 Javascript 파일을 생성하여 아래와 같이 간단하게 Component를 만들 수 있습니다.

//App.js
import React from "react"
function App() {
  return (
    <div>
      <h1>Hello</h1>
    </div>
  )
}
export default App

세부적으로 파헤쳐 보면 아래와 같습니다.

1) react import

import react from "react"

2) 함수(Component)를 생성하고 HTML을 return하도록 작성

function App() {
  return (
    <div>
      <h1>Hello</h1>
    </div>
  )
}

3) export할 Component명 명시

export default App

1.3 Component 사용하기

위에서 생성한 Component를 다른 javascript 파일에서 import하여 아래와 같이 사용할 수 있습니다.

//index.js
import React from "react"
import ReactDOM from "react-dom"
import App from "./App"
ReactDOM.render(<App />, document.getElementById("root"))

세부적으로 살펴보겠습니다.

1) import

  • react import
  • rendering을 위한 "react-dom import"
  • "Component"가 있는 Javascript import

2) ReactDOM.render 함수 호출

  • 사용될 Component 명 명시 : "<App />"
  • rendering 할 DOM 선택 : "document.getElementById('root')"

3) index.html에서 rendering

  • index.html의 dom에 해당하는 부분에 작성된 Component가 저장되어 표출

4) 동작 확인

1.4 여러 개의 Component를 만들기

하나의 File에 여러 개의 Component를 만들어 사용 할 수 있습니다. 위의 App.js에 Food라는 Component를 하나 더 생성해보겠습니다.

//App.js
import React from "react"
//Food Component
function Food() {
  return <h2>Apple</h2>
}
//App Component
function App() {
  return (
    <div>
      <h1>Hello!!!!!</h1>
      <Food />
    </div>
  )
}

export default App

1) App.js 에 Food Component 추가

function Food() {
  return <h2>Apple</h2>
}

2) App Component에서 Food Component 사용

function App(){ return ... <Food /> ... }

3) 동작 확인

2. JSX & Props

2.1 JSX(Javascript XML)란?

위에서 Component를 return 할 때 사용한 HTML과 비슷한 부분을 JSX라고 합니다. JSX는 HTML 뿐만 아니라 Javascript를 이용한 동적인 부분도 작성할 수 있습니다. 간단히 JSX를 알아보면 아래와 같습니다.

  • XML과 유사한 Javascript를 확장한 문법
  • Javascript와 HTML의 조합으로 작성
  • React가 필요로하는 유일한 추가적인 개념(JSX 이외에는 Javascript 개념만 알면 됨)

2.2 Props(Properties)

  • Component에 Data를 전달하기 위한 방법으로 Component의 속성값을 의미
  • Component명({Props}) 의 형태로 사용

예를 들어 App Component에서 Food Component로 특정 데이터를 보내고, Food Component에서 전달받은 데이터를 사용하는 예시를 알아보겠습니다.

//App.js
import React from "react"
function Food({ name }) {
  return <h2>I like {name}</h2>
}
function App() {
  return (
    <div>
      <Food name="apple" />
      <Food name="banana" />
    </div>
  )
}

export default App

1)Food Component에서 props 설정

function Food({ name }) {
  return <h2>I like {name}</h2>
}
  • name이라는 값을 props로 설정
  • name의 형태로 props 사용

2)App Component에서 Food Component에 props 전달

//apple props을 가지는 Food Component
    <Food name = "apple"/>
//banana props을 가지는 Food Component
    <Food name = "banana"/>

3) 동작 확인

3. 동적인 Component 사용(Map함수 이용)

위의 예시에서 Component를 만들어 보았고, 만든 Component를 하나씩 입력하여 사용해보았습니다. 이런 경우에 만약 같은 Component를 5번 사용할 경우 5번을 입력해야할 것입니다.
이런 경우 Map 함수를 이용하면 동적으로 Component를 사용 할 수 있습니다.

3.1 Map 함수란?

  • Map 함수의 인자로 입력 된 함수를 Object의 각 요소에 적용하는 함수
  • 사용방법 : Ojbect.Map(func)

3.2 동적인 Component 사용 예시

import React from "react"

//Food Component
function Food({ name, evaluation }) {
  return (
    <h2>
      I like {name}. It is {evaluation}.
    </h2>
  )
}

//Object
const foodILike = [
  {
    name: "Pizza",
    evaluation: "Good",
  },
  {
    name: "Steak",
    evaluation: "Excellent",
  },
]

//food Render 함수
function foodRender(food) {
  return <Food name={food.name} evaluation={food.evaluation} />
}

//App Component
function App() {
  return <div>{foodILike.map(foodRender)}</div>
}

export default App

세부적으로 살펴보겠습니다.

1) Javascript Object 생성

  • foodILike Object를 생성(name, evaluation으로 구성)

2) food Component에서 2개 props 받기

function Food({ name, evaluation }) {
  return (
    <h2>
      I like {name}. It is {evaluation}.
    </h2>
  )
}
  • Object의 name 과 evaluation를 입력받아 h2 Tag로 출력

3) Component를 생성하는 함수 만들기

function foodRender(food) {
  return <Food name={food.name} evaluation={food.evaluation} />
}
  • food : foodILike Object 여러 요소 중 하나의 요소
  • 함수 역할 : name 과 evaluation props를 가지는 Food Component 생성

4) Object의 Map 함수를 이용해 Component 동적 생성

{
  foodILike.map(foodRender)
}
  • foodILike : Map을 적용할 object명
  • foodRender : foodILike Object의 각각의 요소에 적용할 함수
  • map 함수 적용 결과 : 각 Ojbect의 name 과 evaluation props를 가지는 Food Component 생성

5) 동작 확인

6) 기타 사항

브라우저를 실행시키면 위와 같이 동작하는 것을 확인 할 수 있지만, 개발자도구(F12)를 실행시켜서 콘솔창을 보면 아래와 같은 Warning Message를 확인 할 수 있습니다.

이는 Ojbect의 각각의 값에 id라는 props를 저장하고, Component를 사용할 때 이 id를 key값으로 설정해줌으로서 해결할 수 있습니다.

//Ojbect
const foodILike = [
  {
    id: 1,
    name: "Pizza",
    evaluation: "Good",
  },
  {
    id: 2,
    name: "Steak",
    evaluation: "Excellent",
  },
]

//food Render 함수
function foodRender(food) {
  return <Food key={food.id} name={food.name} evaluation={food.evaluation} />
}
  • foodILike Object의 각각의 요소에 id값 저장
  • Component에 key값으로 food.id값 사용

4. 유효한 Props 인지 Check하기

Component에서 전달받은 props는 우리의 의도와는 다른 props가 전달 될 수 있습니다.
그러므로 우리는 전달받은 props가 유효한 props인지 확인해야합니다.
props types 라는 것을 통해 유효성을 check할 수 있습니다.

4.1 props types 설치하기

  • cmd(터미널)에서 npm i prop-types 입력
  • package.json 의 "dependencies" 항목에서 설치 되었는지 확인
movie_app_2019>nmp i prop-types

4.2 props types 사용하기

1) props types import

import PropTypes from "prop-types"

2) 확인할 props와 유효성 체크항목 명시

Food.PropTypes = {
  name: PropTypes.string.isRequired,
  evaluation: PropTypes.string.isRequired,
}

3) 유효성이 어긋나는 경우 확인

위에서 작성한 유효성에 어긋날 경우 개발자 도구 -> 콘솔창에서 Warning을 확인 할 수 있습니다.

감사합니다.

반응형

'FrontEnd > React' 카테고리의 다른 글

[React]4.영화 App 만들기  (0) 2021.03.15
[React]3.State & Component Life Cycle  (0) 2021.03.15
[React]1.React 소개와 설치  (0) 2021.03.15
[React 기초] 0. 개요  (0) 2019.08.16
반응형

안녕하세요. PSYda 입니다.

오늘은 React에 대해 간략하게 소개하고, 설치하는 과정을 포스팅할 예정입니다.
이전 시간에 말씀드린 것 처럼 Nomad Coders 의 "React JS로 웹서비스 만들기"를 통해 학습한 내용을 정리하였으며, 이번 포스팅에서 알아볼 내용은 아래와 같습니다.


  1. React에 대한 소개
  2. React Setup
  3. React App 구조 및 동작 원리

1. React 소개

1.1 Why React?

1) 많은 회사들이 React를 사용

  • React는 Facebook이 만들었고, 모든 Facebook은 React로 구현
  • Airbnb, npm, Netflix 등 유명한 서비스들이 React로 구현

2) 많은 개발자가 React를 사용

  • npm에서 react library 다운로드 정보를 살펴보면 500만건/1주

  • 2018년 프론트엔드 개발 생태계 설문조사에서 React가 압도적 1등

3) 활성화가 잘 된 커뮤니티

4) Javascript 기반의 언어(라이브러리)

  • React가 사라지더라도 Javascript에 대한 Skill은 향상 가능
  • Angular의 경우 자체적인 문법을 사용하기 때문에 배우기 어렵고, 망하면 남는게 없음

5) 그 외 이유는 아래 그림 및 링크 참고

1.2 필요한 사전 지식

React를 배우기 전에 알고 있으면 좋은 Skill 들은 아래와 같습니다.

1) HTML
2) CSS
3) Javascript
4) node.js

1.3 설치할 프로그램들

1) node.js : node.js 공식 홈페이지에서 설치

  • 설치 후 cmd창(터미널)에서 node -v 입력하여 version 확인
>node-v
v10.16.2

2) npm: node.js를 설치하면 자동으로 설치

  • 설치 후 cmd창(터미널)에서 npm -v 입력하여 version 확인
>npm -v
6.10.3

3) npx : npm을 통해서 설치

  • cmd창(터미널)에서 npm install npx -g 명령어 입력하여 설치
>npm install npx -g

4) git : git 공식 홈페이지에서 자신의 OS에 맞게 설치

  • 설치 후 cmd창(터미널)에서 git --version 입력하여 version 확인
>git --version
git version 20.22.0.windows.1

5) vscode : 요즘 많이들 쓰는 IDE(코드 편집기)

  • 원래 쓰는 IDE가 있으면 굳이 설치할 필요 없음

2.React Setup

2.1 React App 만들기

React는 아름다운(?) Component를 만들 수 있는 언어이지만, Browser에서 React 코드를 이해하지 못하기 때문에, 못생긴(이해 가능한) 코드로 변경해줘야합니다. 이를 위해 Webpack, Babel을 다운로드 해야 하고 React 코드를 컴파일을 해야 하는 등 번거로운 작업들이 필요했었습니다. 하지만 2016년 이후부터는 'create react app' 을 통해 간단하게 React Wep App을 만들 수 있습니다.

1) App 설치

  • cmd(터미널)창에서 npx create-react-app APP이름 을 입력
    >npx create-react-app movie_app_2019
    npx: installed 91 in 9.768s
    creating a new React app in path\moview_app_2019
    installing packages. This might take a couple of minues.

2) VS code 열기

  • cmd(터미널)창에서 code moview_app_2019 입력
    >code movie_app_2019

3) APP 실행

  • VS code 상의 Terminal에서 npm start 입력
    movie_app_2019> npm start

4) APP 구동 확인

2.2 Github Repository 만들기

React App 을 git으로 관리하며 원격 서버는 Github를 이용할 예정입니다. 따라서 Github Repository를 만들어 git과 연동하는 방법을 설명합니다. Repository 생성을 위해서는 Github에 별도의 가입이 필요하며, 계정이 있다는 가정하에 진행합니다.

1) Gitgub 사이트에서 새로운 Repository 생성

2) git 저장소 생성
생성된 React App 폴더에 git 저장소를 생성합니다.

  • cmd창(터미널)에서 git init 입력
    movie_app_2019> git init
    initialized empty Git repository in movie_app_2019/.git/

3) git에게 원격 서버 알려주기
1번에서 생성한 Repository 주소를 입력합니다.

  • cmd창(터미널)에서 git remote add origin 원격서버주소 입력
movie_app_2019>git remote add origin https://github.com/psyssai/movie_app_2019.git

4) 원격 서버에 프로젝트 저장

  • cmd창(터미널)에서 아래와 같이 순서대로 입력
  • git add.
  • git commit -m '입력할 메시지'
  • git push origin master
movie_app_2019>git add.
movie_app_2019>git commit -m "#1.0 Creating Your React App"
movie_app_2019>git push origin master

5) 원격저장소 확인
Github 사이트로 이동하여 원격 저장소에 잘 발행되었는지 확인합니다.

3. React App 구조 및 동작 원리

3.1 React App Project 구조

위의 그림과 같이 React App Project는 3개의 폴더를 가집니다.
1) node_modules
2) public

  • favicon.ico : Browser Tab에 나오는 아이콘
  • index.html : index만 가지고 있는 html
  • manifest.json : (추후 설명)

3) src : 각종 소스가 모여 있는 폴더

  • App.js와 Index.js를 제외하고 모두 삭제(처음부터 새로 만들기 위해)
  • App.js : 컴포넌트에 해당하는 부분
  • index.js : 컴포넌트를 그려주는 부분

3.2 React의 특징

1) 실시간 적용

  • App.js 를 수정하면 그 결과가 바로 적용되어 확인 가능

2) Virtual DOM

  • Application이 Load할 때 빈 html을 로드 하고, react가 HTML에 정보를 밀어 넣음

3.3 ReactApp 실행

  • cmd창(터미널)에서 npm start 입력
movie_app_2019>npm start
Starting the development server...
complied successfully!

3.4 동작 원리

1) App.js에 있는 App 함수에서 생성하고 싶은 부분을 명시
2) index.js 에서 App을 불러오고 index.html에서 찾을 요소를 명시
3) index.html 에서 찾아진 요소 부분에 App에서 명시한 것이 생성

아래와 같이 코드를 입력하고, 결과를 확인합니다.

//App.js
import React from 'react';

function App() {
    return <div>Hello!!!!!</div>
}

export default App
//index.js
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';

ReactDOM.render(<App />, document.getElementByID('root'))
<!-- index.html 의 body 부분 -->
    <noscript>You need to enable JavaScript to run this app.</noscript>
    <div id="root"></div>

  • 실제로 index.html은 비어 있지만, 아래와 같이 Browser에 표시됨
  • F12(개발자 도구)를 눌러보면 Hello!!!! 가 id root에 생성되어 있음

감사합니다.

반응형

'FrontEnd > React' 카테고리의 다른 글

[React]4.영화 App 만들기  (0) 2021.03.15
[React]3.State & Component Life Cycle  (0) 2021.03.15
[React]2.Component, JSX, Props  (0) 2021.03.15
[React 기초] 0. 개요  (0) 2019.08.16
반응형

안녕하세요. PSYda 입니다.

최근 Nomad Coders 의 "React JS로 웹서비스 만들기" 과정을 통해 React를 스터디 하고 있습니다. 강의를 들으며 제가 이해한 내용을 정리하여 올릴 예정입니다. 

 

먼저 강의에 대해 간단히 소개하면, 총 25개 강의로 구성되어 있으며 한 강의당 10분 내외로 듣기에 부담이 없어 좋습니다. 

 

해당 사이트를 통해 React 뿐만 아니라 다른 좋은 강의들이 있어서 도움을 많이 받고 있습니다.

아래 사이트를 통해 무료 교육과 필요시 유료 교육을 들으실 수 있고, 강사님이 개발자들에 필요한 유용한 정보들을 Youtube에도 올려주시니 구독하시고 자주 들으시면 좋을 것 같네요.

 

https://academy.nomadcoders.co/courses/

 

Academy

% Complete

academy.nomadcoders.co

https://www.youtube.com/channel/UCUpJs89fSBXNolQGOYKn0YQ

 

노마드 코더 Nomad Coders

한국인 린과 콜롬비아인 니꼴라스의 프로젝트 "노마드 코더" 입니다. 2015년 떠나, 현재까지 원하는 곳에서 일하며, 살고 있습니다. + + Nomad Academy: https://academy.nomadcoders.co Facebook: facebook.com/nomadcode...

www.youtube.com

감사합니다.

 

 

반응형

'FrontEnd > React' 카테고리의 다른 글

[React]4.영화 App 만들기  (0) 2021.03.15
[React]3.State & Component Life Cycle  (0) 2021.03.15
[React]2.Component, JSX, Props  (0) 2021.03.15
[React]1.React 소개와 설치  (0) 2021.03.15

+ Recent posts

반응형