저번시간에 만든 웹 페이지는 정상적으로 출력은 되지만 한 가지 에러가 있었습니다.





array에 있는 각 차일드는 반드시 고유한 key prop을 가져야 한다는 에러 내용입니다.

전 시간에 만들었던 App 컴포넌트에서 map 기능을 실행해서 

1개의 argument "movie"를 얻었습니다.

이번 시간에는 그 외에 index라는 것을 추가해 보도록 하겠습니다.

index는 우리가 현재 제공하는 리스트의 숫자를 의미합니다.

return을 하는 부분 마지막에 key prop으로 index를 작성하도록 하겠습니다.


class App extends Component {
render() {
return (
<div className="App">
{movies.map((movie, index) => {
return <Movie title={movie.title} poster={movie .poster} key={index}/>
})}
</div>
);
}
}


저장하고 새로 고침을 하게 되면 아래 화면과 같이 에러가 사라진 것을 확인하실 수 있습니다.






추가적으로 코딩을 하기 위해서는 prop-types 를 설치해야 합니다.

npm만 설치되어 있는 경우 npm으로 시작하는 명령어를 실행하시고, 

yarn을 사용하실 경우 아래 명령어를 참고하세요.

저는 yarn 명령어를 통해서 설치하였습니다.


Install Prop-Types with npm:

 npm install --save prop-types 

Install Prop-Types with Yarn:

 yarn add prop-types 





설치가 완료되었으면 Movie.js에 가서 PropTypes를 불러오시면 됩니다.

import 명령어로 불러올 수 있는데 아래 코드를 참고하시면 됩니다.

그리고 Movie 컴포넌트에  static propTypes를 추가해보도록 하겠습니다.



import React, { Component } from 'react';
import PropTypes from 'prop-types';
import './Movie.css';

class Movie extends Component {

static propTypes = {
title: PropTypes.string,
poster: PropTypes.string
}

render(){
return (
<div>
<MoviePoster poster={this.props.poster}/>
<h1>{this.props.title}</h1>
</div>
)
}
}


위와 같이 잘 입력하시고 저장하시면 전과 동일한 인터넷 창을 확인하실 수 있으실 겁니다.

굳이 동일한 화면이 출력되는데 왜 추가로 코딩을 했을까요?

그것은 prop-types를 통해서 prop의 type(형태)를 지정해 줄 수 있기 때문입니다.

만약 제가 title 이 숫자여야 한다고 지정하면 어떻게 될까요?

테스트를 해보기 위해서 아래와 같이 string 을 number 로 바꾸고 저장해보겠습니다.

static propTypes = {
title: PropTypes.number,
poster: PropTypes.string
}





위와 같이 에러가 발생하였습니다.

우리가 얻게 되는 정보가 '숫자'가 아니라는 것을 체크할 수 있습니다.

만약 부모 컴포넌트가 string 을 보내면, 

PropTypes 로 string 이라는 것을 체크할 수 있는 것입니다.

그게 '참'이 아니라면  위와 같이 에러 메세지를 받게 되는 것입니다.

덕분에 우리가 부모 컴포넌트에게서 받는 정보의 종류가 무엇인지 체크할 수 있습니다.

또한 이게 필수 required 인지 아닌지 알 수 있습니다.

'isRequired'라고 작성하면 Movie 컴포넌트는 title이라는 

prop을 제공하는 것이 필수로 설정되는 것입니다.



class Movie extends Component {
static propTypes = {
title: PropTypes.string.isRequired,
poster: PropTypes.string
};



이 상태에서는 에러가 발생하지 않을 것입니다. 

하지만 이 상태에서 타이틀을 지워버리면 어떻게 될까요?

아래와 같이 지워보고 결과를 확인해보겠습니다.

App.js 파일에서 아래와 같이 title 부분을 지워보세요.


class App extends Component {
render() {
return (
<div className="App">
{movies.map((movie, index) => {
return <Movie poster={movie .poster} key={index}/>
})}
</div>
);
}
}







위와 같이 에러가 발생한 것을 확인하실 수 있으실겁니다.

required 필수 조건인 prop이 없다고 에러 내용을 보여줍니다.

그래서  proptypes을 알아두면 편리합니다.

부모 컴포넌트에서 얻는 정보의 종류가 무엇인지, 있는지 없는지 알 수 있게 되는 것입니다.

추가적으로 코딩을 해보겠습니다. poster에도 isrequired 를 추가해줍니다.

컴포넌트 Movie poster 하단에도 PropTypes를 추가 작성하겠습니다.

poster 도 포스터 이미지를 반드시 보여줘야 하니 . poster에도 isrequired 를 추가해줍니다.



import React, { Component } from 'react';
import PropTypes from 'prop-types';
import './Movie.css';

class Movie extends Component {
static propTypes = {
title: PropTypes.string.isRequired,
poster: PropTypes.string.isRequired
};

render() {
return (
<div>
<MoviePoster poster={this.props.poster} />
<h1>{this.props.title}</h1>
</div>
);
}
}

class MoviePoster extends Component {
static propTypes = {
poster: PropTypes.string.isRequired
};

render() {
return <img src={this.props.poster} />;
}
}

export default Movie



향후에  API를 통해 정보를 불러온다면, 유저이름은 string이고 필수요건일 것입니다.

이상으로 이번 시간은 마치도록 하겠습니다. 고맙습니다.


리액트에는 2개의 주요 컨셉이 있습니다.  하나는 state, 나머지 하나는 props 입니다. 

이번 시간에는 props에 대한 실습을 해 보겠습니다.




App.js 파일에서는 빨간색으로 표시된 부분을 수정하였습니다.

영화리스트를 만들어 줍니다.  

matrix, full metal jacket, oldboy, star wars 를 추가하였습니다. 
(오타로 start wars라고 입력하였군요;;)

이 영화들의 제목을  자식 컴포넌트인 movie 컴포넌트에 보내고 싶으시면

 빨간색 네모 부분을 작성해주시면 됩니다. 





movie.js 파일에서도 빨간 부분을 작성해주시고 저장해주세요.

그 이후에 인터넷창에 가서 잘 전달되었는지 확인해 보겠습니다.





인터넷 창에서 오른쪽 마우스 누르시고 검사를 클릭하신 후에 console 을 클릭해주세요.

위 화면과 같이 App.js에서 입력한 영화 제목들이 잘 전달된 것을 확인하였습니다.

그럼 이번에는 실제로 영화포스터 이미지 밑에 영화 제목들이 들어가게 수정해보겠습니다.





위에 빨간 화면처럼 한줄만 추가해 주시면 

아래와 같이 영화포스터 이미지 밑에 영화제목들이 들어간 것을 확인하실 수 있습니다.






이번에는 영화 포스터 이미지를 만들어 보겠습니다.

기존에 있던 movies 부분을 movieTitles 로 변경하겠습니다. 

그리고 영화포스터 이미지 리스트를 아래와 같이 만들어 줍니다.

영화 이미지 주소는 구글에서 이미지 검색 후에 이미지 보기를 클릭 하시면 됩니다. 

그 이후에 주소창에 있는 주소를 그대로 붙여넣어주시면 됩니다.















이미지주소까지 잘 입력하셨으면, 

Movie.js 파일에서 Movie 컴포넌트와 MoviePoster 컴포넌트에도 

빨간 네모 부분을 수정해주시면 됩니다.






수정을 다 완료 하셨으면 아래와 같이 인터넷 창에서 

영화 제목, 영화 포스터 이미지가 잘 보실 수 있으실 겁니다.

props 구문은 리액트에서 많이 활용되는 부분이므로,

 앞으로도 자주 보시면서 익숙해지실 것이라고 생각됩니다. 고맙습니다.






 
리액트는 컴포넌트에 기반하고 있습니다.

영화 웹 서비스를 만들기 위해서 가장 먼저 컴포넌트를 정하는 일을 하겠습니다.

첫번째 컴포넌트는 '무비 리스트' 입니다.

빨간색의 큰 네모칸 입니다. 이 컴포넌트는 크고 기본에 해당하니깐  App 컴포넌트로 정하겠습니다.

두번째 컴포넌트는 'Movie'  컴포넌트 입니다.

왼쪽 위 쪽에 보라색 네모칸 입니다. 

세번째 컴포넌트는 'MoviePoster' 컴포넌트입니다.

보라색 안에 왼쪽에 있는 초록색 네모칸입니다. 




가장 기본이 되는 App 컴포넌트는 App.js 입니다. 

이미 생성되어 있기 때문에 편집을 하기만 하면 됩니다.

아래화면이 App 컴포넌트 입니다. 

빨간색 네모 부분을 보시면 자바스크립트 안에 html이 자리 잡고 있습니다.

이것을 JSX 라고 부릅니다. JSX는 리액트 컴포넌트를 만들  때 사용하는 언어입니다. 




이제 코딩을 시작해보겠습니다. 

App.js 를 선택하고 불필요한 내용들은 아래 화면과 같이 지워주겠습니다. 

App.css 파일도 아래화면과 같이 지워줍니다.







지우신 후에 인터넷창에 localhost:3000 주소로 가보시면 

화면에 아무것도 없는 것을 확인하실 수 있으실 겁니다.

이론적인 것을 잠깐 말씀드리면 모든 컴포넌트는 render function을 가지고 있습니다.

render 기능은 무엇인가를 보여주는, 출력하는 기능을 합니다.

create react app에서 제공하는 웹서버를 npm start 명령어로 실행하게 되면,

JS의 모든 코드를 가져와서 html 파일에 담습니다. 

그 파일은 public 폴더 안에 있는 index.html 파일입니다. 

빨간줄 부분을 Movie App 으로 수정하였습니다.




index.html 파일에서  불필요한 주석 내용들은 지워줍니다.

그리고 App.js 파일에 가서 아래와 같이 입력하고 저장하면 

인터넷 창에 정상적으로 출력되는 것을 확인하실 수 있습니다.




저희는 지금 index.html 파일과 App.js 파일만 수정해서 위와 같은 결과를 출력할 수 있었습니다.

하지만 저희가 코딩하고 있는 파일은 사실 index.js 파일입니다. 

아래 화면이 index.js 파일입니다.




index.js는 react  ,reactDOM, css, App 컴포넌트를 불러옵니다. 

가장 위에 import 구문을 참고하세요.

그리고 위 화면에서 아래 명령어 부분을 보면 

ReactDOM이 App 컴포넌트를 출력 하라고 되어 있습니다. 

출력하는 화면은 root 라고 지정된 곳에 하라고 되어 있습니다. 

root는 index.html 에서 확인할 수 있습니다. 아래 화면을 참고하세요. 





이제 Movie 컴포넌트를 만들어 보도록 하겠습니다. 

아래와 같이 새 파일을 클릭해서 Movie.js 파일과 Movie.css 파일을 만들어 줍니다.

Movie.css는 이번시간에 편집은 안하지만 일단 같이 만들어주세요.





 
Movie.js 파일을 아래와 같이 내용을 채워 보세요.

App.js 처럼 React를 import 해주세요.   Movie.css 도 import 해주세요. 

클랙스 를 만들어 주고 아래와 같이 코딩 해 보세요.

그 이후에는 App.js 파일에 Movie 를 render 해 줍니다.





다 코딩 하셨으면 저장하고 인터넷창을 확인해보세요. 아래와 같이 잘 출력 되셨나요?




아래와 같이 Movie 컴포넌트를 출력하는 부분을 

여러번 붙여 넣으면 화면에도 여러번 동일하게 출력됩니다.




이제 MoviePoster 컴포넌트를 만들어 보겠습니다.

Movies.js 파일에 Movie class 밑에 코딩해보겠습니다.

MoviePoster class 내용에는 이미지를 넣어야 합니다. 

그리고 Movie class 에서 MoviePoster 컴포넌트를 호출해주시면 됩니다.




위와 같이 이미지 주소 넣는 방법도 알아보겠습니다.

 저는 요즘 흥행 했던 범죄도시를 검색하였습니다. 

원하는 이미지를 찾으셨으면 사진 오른쪽에 이미지 보기를 클릭해주세요. 



이미지를 클릭하면 윗부분 주소창을 복사해서 넣어주시면 됩니다.



이미지 주소까지 다 넣어주셨으면 편집했던 파일들을 저장하신 후에 인터넷 창을 확인해보세요. 

아래와 같이 잘 출력되셨나요?  



동일한 내용이지만 여러개의 화면을 출력해보았습니다. 

이번에는 캡쳐화면도 많아서 시간이 조금 걸렸는데 잘 따라해보셨나요?

다음 연재시간에도 포기하지 않고 공부해보도록 하겠습니다. 긴 글 읽어주셔서 고맙습니다. 



안녕하세요? React 왕초보 입니다.

그동안은 실전보다는 이론에 가까운 내용만 연재를 하였습니다.

그리고 이제부터는 웹 서비스를 만들 것입니다. 

정말 간단하게 여러 개를 만들어 보려고 기획 하였지만 취소하였습니다.

간단하지만 그럴듯한 웹 서비스를 하나라도 제대로 도전해보겠습니다. 

아래에 완성된 모습의 영화 웹 서비스를 도전할 것이며, 참조하는 강의 동영상은 아래와 같습니다. 

일단 웹을 만들기 위해서 개발환경을 위해서 몇가지를 설치해야 합니다.

지금까지와 마찬가지로 캡쳐화면은 클릭하면 원본크기로 확인이 가능합니다.

1. node.js 를 가장 먼저 설치하시기 바랍니다. ( 리액트 환경을 쉽게 구성하려면 npm이 필요한데 npm은 node.js를 설치하면 자동으로 설치됩니다.)



2. create react app ( 손쉽게 리액트 앱을 만들어 주는 툴) 
   - 구글에 검색 후 첫번째 링크로 들어가서 아래로 내리면 간단한 명령어 몇개로 설치가 가능합니다.





mac 같은 경우 터미널을 실행시켜서 위에 명령어를 실행시키면  개발서버를 손쉽게 실행 할 수 있습니다. 

하지만 저같은 경우 위에 명령어를 그대로 실행시켰더니 에러가 발생하였습니다.





권한 문제가 생기면서 에러가 발생하였습니다. 인터넷으로 검색한 결과 아래 명령어로 실행시키시면 에러 없이 설치 할 수 있었습니다.

password부분은 본인pc의 비밀번호를 입력하시면 됩니다.




저는 기존에 설치했었던 화면이라서 처음 설치하시는 분들과는 약간 다를 수도 있습니다. 에러만 발생하지 않으면 정상적으로 설치된 것입니다.

설치가 완료 되었으면 movie_app 이라는 웹을 만들기 위해서 다시 아래 명령어를 실행시켜줍니다.





위와 같이 중간 정도 왼쪽에 Success! 가 뜨면 정상적으로 완료된 것입니다. 

그 이후에 해당 폴더로 진입해서 npm start 명령어를 실행시키시면 됩니다.

실행시키면 아래와 같이 자동으로 웹화면이 뜨는 것을 보실 수 있으실 겁니다.




3. 스크립트 에디터 설치 ( 아톰, 브라켓, visual studio code 등 여러가지가 있습니다. 저같은 경우는 vsc( visual studio code) 를 설치하였습니다.)

vsc 를 실행한 후 폴더 열기를 클릭 후  아까 movie_app 폴더를 선택합니다. 그러면 아래와 같이 여러개의 파일이 자동으로 생성되어 있는 것을  확인하실 수 있습니다.





위와 같이 여러개의 파일 중에 App.js 파일을 클릭 후 빨간 네모 안에 내용을 수정하고 저장하게 되면 자동으로 웹사이트 내용이 바뀌는 것을 확인하실 수 있습니다.

오늘은 간단한 영화 웹 서비스 만들기 첫번째 시간이었습니다. 

완성본을 다 만들때까지 포기하지 않고 최선을 다해보겠습니다.

데이터 배열을 리액트에서 랜더링 할때는 자바스크립트 내장함수인 map을 사용합니다.

map() 메소드는 파라미터로 전달 된 함수를 통하여 배열 내의 각 요소를 처리해서 그 결과로 새로운 배열을 생성합니다.


arr.map(callback, [thisArg])

callback 새로운 배열의 요소를 생성하는 함수로서, 다음 세가지 인수를 가집니다.

<font color="#009e25">currentValue</font> 현재 처리되고 있는 요소

index 현재 처리되고 있는 요소의 index 값

array 메소드가 불려진 배열
<br />
thisArg (선택항목) callback 함수 내부에서 사용 할 this 값을 설정




예제를 통해서 더 알아보도록 하겠습니다.

아래 예제는 특정 숫자의 제곱값을 출력하는 예제입니다.




var numbers = [1,2,3,4,5];

var processed = numbers.map(function(num) {
return num*num;
});

결과 : [1, 4, 9, 16, 25]





간단하게 크롬의 개발자 도구를 사용해서 실습해 보겠습니다.


단축키는 f12 입니다.  저 같은 경우 맥을 사용하는데  alt +command+ i 가 단축키 입니다.


이번연재에도 동일하게 캡쳐화면은 클릭하면 원본크기로 확인이 가능합니다.








ES6 문법으로 사용되면 다음과 같습니다.  


arrow function이 포함된 문법입니다. 보통 callback 함수를 작성할 때 많이 사용됩니다.




/* ES6 Syntax */


let numbers = [1, 2, 3, 4, 5];

 

let result = numbers.map((num) => {

    return num*num;

});





arrow function 관련 주소

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions




아래 링크의 웹서비스는 es6 문법을 es5 로 변환해주는 곳입니다.

es6console 주소



위에 주소로 들어가시면 아래와 같은 화면 구성이 아닐 수도 있습니다.


그럴경우 오른쪽에 ES5부분을 클릭해주세요. 







es6 문법을 처음 보시면 생소하게 느끼실 수도 있습니다.


하지만 react에서 사용 하시다보면 꽤 쓸만 하다고 합니다.





컴포넌트 매핑

리액트에서 똑같은 원리로 배열을 컴포넌트로 매핑할 수 있습니다.




실습을 해보겠습니다. 동일하게 codpen.io 로 접속하시면 됩니다.


아래에 html에 들어가는 스크립트는 앞으로는 생략하고 캡쳐하도록 하겠습니다.


제가 캡쳐한 부분에 html 영역이 보이지 않아도 항상 입력해주셔야 제대로 된 결과값이 출력됩니다.



HTML 영역 : <div id="root"></div>




실습을 하기 위해 기본적으로 아래 스크립트를 작성해주세요.




위와 같이 결과물이 잘 출력된다면 , 

간단한 주소록 (contact) 화면을 출력해보는 실습을 해보겠습니다.

가장 먼저 Contact 라는 컴포넌트를 만들어 주세요.

아래 캡쳐와 같이 하드코딩을 해주겠습니다. 

즉 반복되는 내용을 직접 작성 하겠다는 의미입니다.




위와 같이 이름과 전화번호가 있는 화면이 잘 출력되셨나요?


이름과 전화번호가 있는 부분이 반복되므로 또 다른 컴포넌트로 만들어보겠습니다.


컴포넌트 이름은 ContactInfo 로 하겠습니다.








문법이 생소하고 어려워졌다고 느껴질 수도 있으실 것 같습니다.

 저도 어려웠습니다. 앞으로 연재를 진행하면서 반복적으로 하다보면 익숙해지실 것이라고 생각됩니다. 

저도 그렇게 되길 바라면서 연재를 계속 진행해보겠습니다.



이번 시간에는 리액트의 중요한 부분 중에 하나인 state에 대해서 알아보겠습니다.


     state    

- 유동적인 데이터

- JSX 내부에 {this.state.stateName}

- 초기값 설정이 필수 ,생성자(constructor)에서 this.state = { } 으로 설정

- 값을 수정할 때에는 this.setState({...})

  랜더링 된 다음엔 this.state = 절대 사용하지 말 것 
  (이유는 랜더링 된 다음에 이 구문 사용을 사용하면
   바뀐 부분만 업데이트 하겠다는 것을 무시하는 것이고, 성능에도 안 좋습니다.)

 

바로 실습을 하면서, Counter 라는 기능을 만들어 보겠습니다.

처음에는 지금까지 한 것을 복습한다는 생각으로 "React 왕초보의 count"만 출력해 보겠습니다. 

지금까지와 마찬가지로 캡쳐화면은 모두 클릭하시면 원본 크기로 확인이 가능합니다.


 모두 잘 출력되셨죠? 이번에는 counter의 주요 기능인 숫자와 버튼을 만들어 보도록 하겠습니다.



 분명히 맞게 코드를 입력한 것 같은데 흰색 화면에 아무 것도 출력이 되지 않습니다.

그 이유는 화면을 위로 올려서 처음에 배웠던 내용을 보시면 답이 있습니다.

초기값 설정을 해주지 않은 이유 때문입니다. 

그럼 초기값을 설정을 해보도록 하겠습니다.




빨간 네모 박스 안에 초기값을 설정해주니 위와 같이 숫자0 과 버튼이 생겼습니다.

constructor의 메소드는 props 입니다.

super(props)를 먼저 실행해줘야 이 메소드 안에서 this.state라던지 props라던지 접근 할 수 있습니다.



이제 버튼이 클릭 될 때 실행될 메소드를 만들어 보겠습니다.

아래 빨간 네모창과 빨간 줄 부분을 추가해 보겠습니다.



코드를 잘 작성한 후에 아래 버튼을 클릭해봤는데 아무 반응이 없습니다. 

그래서 개발자 도구를 통해서 이유가 뭔지 살펴보겠습니다.

개발자 도구 단축키를 클릭해봤는데 안되서 저는 수동으로 직접 선택하였습니다.

아래 화면을 참고하세요. 




개발자 도구가 열여서 아래 press me 버튼을 클릭할 때마다 에러가 늘어나는 것을 확인할 수 있었습니다.

아까 만든 this.setState 부분에서 this 가 어떤 부분인지 알 수 없어서 발생하는 에러입니다.



 


아래 빨간 네모 화면을 추가해 주고 버튼을 다시 클릭해보면 

아래 화면과 같이 숫자가 올라가는 것을 확인할 수 있습니다.

드디어 간단하지만 Counter 기능이 구현되는 웹을 만드는데 성공하였습니다.








아까 확인했던 개발자 도구를 열어서 추가로 에러가 발생하는지 확인해보도록 하겠습니다.

그 전에 발생한 에러만 출력되고 버튼을 계속 눌러도 에러가 발생하지 않는 것을 확인하였습니다.





약간은 지루했던 문법까지 배우면서 4번째 시간만에 첫번째 웹을 만들어 봤습니다.

간단하지만 에러 없이 구현해봤다는 것에 의미를 부여하고, 

앞으로는 조금 더 그럴듯한 웹을 만들기 위해서 더 공부해도록 하겠습니다.

고맙습니다.

'React > 왕초보 도전' 카테고리의 다른 글

6. 간단한 영화 웹 서비스 만들기 1  (0) 2017.12.19
5. component mapping , 간단한 주소록 구현  (0) 2017.12.19
3. props 소개  (0) 2017.12.19
2. ES6 클래스, JSX 소개  (0) 2017.12.19
1. React 소개  (0) 2017.12.19
React는 데이터가 부모 컴포넌트에서 자식 컴포넌트로 흐르는 단방향 데이터 흐름을 지향합니다. 이렇게 함으로써 컴포넌트를 단순하고 예측할 수 있게 만들었습니다. 부모는 자식에게 props 값을 전달하고 렌더링 합니다. 최상위 컴포넌트의 속성이 바뀌면 React는 변경 사실을 컴포넌트 트리에 전달하고, 해당 속성을 사용한 모든 컴포넌트를 다시 렌더링합니다. 

 또한, 컴포넌트는 내부 상태 값을 가질 수 있으며, 이 값은 컴포넌트 내부에서만 수정할 수 있습니다. React 컴포넌트는 본질적으로 단수합니다. props와 state, 두 값을 이용해서 가상 표현 객체를 생성하는 함수라고 볼 수 있습니다. 


<props>
- "properties"의 줄임말,  사용자가 컴포넌트에 전달해 보관하길 원하는 데이터를 의미
- 컴포넌트 내부의 immutable data(변하지 않는 데이터)
- jsx 내부에 {this.props.propsName}
- 컴포넌트를 사용할 때, <> 괄호 안에  propsName="value"
- this.props.children 은 기본적으로 갖고 있는 props로서, <Cpnt> 여기에 있는 값이 들어간다.</Cpnt>


직접 실습을 해보도록 하겠습니다. 
props 부분을 빨간색 줄로 표시하였습니다.
아래 캡쳐화면들은 모두 사진을 클릭하면 원본 크기로 보실 수 있습니다.







이번에는 App 컴포넌트의 props를 하위 컴포넌트인 Codelab의 props로 전달하는 방법을 알아봅시다.







 기본 값 설정하는 방법은 아래와 같습니다.

  Component.defaultProps = {...}





Type 설정하는 방법은 아래와 같습니다.

  Component.propTypes = {...}

 유효성 검사기 설명
 ProTypes.array  속성이 배열이여야 한다.
 ProTypes.bool 속성이 부울 값 (true/false)이어야 한다.
 ProTypes.func 속성이 함수여야 한다.
 ProTypes.number 속성이 숫자(또는 구문 분석으로 숫자를 얻을 수 있는 값)여야 한다.
 ProTypes.object 속성이 객채여야 한다.
 ProTypes.string 속성이 문자열이어야 한다.









이번에는 지금까지 배운 것들을 실습해 보도록 하겠습니다.
아래 화면과 같이 아래쪽 흰색 화면에 문자가 잘 출력 되셨나요?






다음 시간에는 React.js 의  핵심적인 기능 중의 하나인

state에 대해 알아보려고 합니다.


오늘도 전문성과 친절함이 부족한 긴 글을 읽어주셔서 고맙습니다.  




안녕하세요? 두번째 시간에는 개발환경설정에 대해서 연재할 예정이였습니다. 

하지만, 로컬(컴퓨터)에 개발환경을 설치하지 않아도 웹으로도 실습이 가능하여, 

설치는 다음에 필요한 시간으로 미루고,

 React에 주요 개념들을 먼저 살펴보도록 하겠습니다. 



제가 이번시간부터 몇 회에 걸쳐서 참고할 인터넷 강의는 무료이며, 
인프런에서 무료로 수강이 가능합니다. 
(회원가입이 귀찮으시면 유튜브에서 리액트를 검색하셔서 참고하셔도 됩니다.)

- 인프런 사이트에 들어가셔서 react를 검색하신 후에 
React & Express 를 이용한 웹 어플리케이션 개발하기 ] 강의 입니다. 

실습이 가능한 아래 사이트로 이동해보도록 하겠습니다.




오른쪽 위에 빨간색 settings를 클릭 하고 
아래 숫자 순서대로 클릭을 해줍니다.


3번 Quick-add 에서 react 을 선택하고 ,
 react-dom을 한번 더 선택하시면
위와 빨간 네모처럼 적용될 것입니다.


ES6는 자바스크립트 최신문법 입니다.

아래 예제에 나오는 Class는 ES6에 새로 도입된 문법입니다. 

- javascript Class 가 궁금하시면 아래 링크를 참조하세요. 



위와 같이 타이핑을 직접 해 보세요. 

자동완성기능이 없어서 오타가 날지 모르니 아래 스크립트를 복사해놓겠습니다

첫번째 실습인데 결과물이 나오지 않으면 포기하실 수도 있으실까봐 
여러분들 위한 저의 작은 배려(?)입니다. 
(사실 저도 처음부터 오타가 나서 오타 찾느라 시간이 오래 걸렸던 것은 비밀입니다.)

앞으로는 잘 하실 수 있을 것이라고 믿고 따로 타이핑 한 것을 복사해 놓지는 않을게요. 


====================================================================
- HTML  내용 :
<div id="root"></div>
====================================================================
- JS 내용 : 
class Codelab extends React.Component {
  render(){
    return (
      <div>React 왕초보</div>
    );
  }
}

class App extends React.Component{
  render(){
    return(
      <Codelab/>
    );
  }
}

ReactDOM.render(<App/>,document.getElementById('root'));
====================================================================


JSX 의 몇가지 특징에 대해서 알아보겠습니다.

1. Nested Element

/* 컴포넌트에서 여러 Element를 렌더링 할 때 
      꼭 container element 안에 포함시켜주세요 */

아래 <div> </div> 안에 넣으라는 의미로 저(?)는 이해 하였습니다.


render() {
    return (
        <div>
            <h1>Hi</h1>
            <h2>Yay! Error is gone.</h2>
        </div>
    )
}


2. JavaScript Expression

/* JSX 안에서 JavaScript를 표현하는 방법은 간단합니다.
    그냥 { } 로 wrapping 하면 됩니다. */


아래 실습화면에 let 이 사용되었는데 , 관련해서 설명은 아래 설명을 참고해주세요. 

let으로 선언한 변수는 변수를 선언한 블록과 그 내부 블록들에서 유효하다. 이럴 경우, let은 var와 같이 동작한다. 가장 큰 차이점은 var 변수의 유효 범위는 전체 외부 함수까지라는 점이다.

다시 직접 타이핑을 해보세요. 
변경된 부분은 빨간색으로 표시하였습니다. 
여러분들도 아래 흰색 화면에 잘 출력되었죠?



3. Inline Style

/* JSX 안에서 style 을 설정 할때는, string 형식을 사용하지 않고
    key 가 camelCase 인 객체가 사용됩니다. */

 camelCase란? 
 다 소문자로 camelcase라고 쓰는 것이 아니고
 단어가 이어질때 첫글자는 대문자로 해주는 것이라고 저(?)는 이해하고 있습니다 .
 예) camelcase (x) -> camelCase (o)


또 직접 타이핑을 해봅시다. 추가되는 부분을 빨간색으로 친절하게(?) 표시하였습니다.



4. Comments


/* JSX 안에서 주석을 작성 할 때는 
       {  /* ... */  }
    형식으로 작성하세요. 

    주의 하실점은 이 역시 Nested Element 부분에 설명했던것과 같이
    container element 안에 주석이 작성되어야 합니다. */

render() {
    return (
        <div>
            { /* This is How You Comment */ }
            { /* Multi-line
                    Testing */ }
                React CodeLab
        </div>
    );
}



이상으로  ES6 Class 와 JSX 에 대해서 알아보았습니다. 잘 이해 되셨나요?

다음 시간에는 React.js 의 가장 기본적이고 핵심적인 기능인 

props를 알아보려고 합니다.

오늘도 전문성과 친절함이 부족한 긴 글을 읽어주셔서 고맙습니다.  


'React > 왕초보 도전' 카테고리의 다른 글

6. 간단한 영화 웹 서비스 만들기 1  (0) 2017.12.19
5. component mapping , 간단한 주소록 구현  (0) 2017.12.19
4. state 소개 , Counter 웹 만들어보기  (0) 2017.12.19
3. props 소개  (0) 2017.12.19
1. React 소개  (0) 2017.12.19
안녕하세요? React왕초보 입니다.

첫시간이니 연재 목적에 대해서 간단한 소개를 하고 연재를 시작하도록 하겠습니다.

저는 이 연재를 통해서 강의를 하거나 지식을 전달하기 보다는 

React를 처음 접하는 제가 과연 웹(앱)을 만들어 볼 수 있는지 도전하는 스토리를 전달하고자 합니다. 

아래는 간단한 제 소개이니 참고하시기 바랍니다. 

---------------------------------------------------------------------------------------------------

React 왕초보

React 왕초보의 앱(웹) 만들기 

React에 대해서 관심만 있는 React 왕초보입니다. 

저처럼 관심만(?) 있는 분들이 React를 통해서 웹(앱) 만들기를 시도해보는 프로젝트입니다.

전문성과 친절함 따위는 없어도 어떻게든 스스로 결과물을 만들어 내는 

좌충우돌 도전기를 연재해보도록 하겠습니다.

(연재되는 내용은 여러분들도 약간의 돈과 시간만 있으면 접할 수 있는 인터넷 강의와

 책을 참고할 것이며, 절대 머리속에서 생각해내지 않는 것임을 주의하시기 바랍니다.)
 
---------------------------------------------------------------------------------------------------
React를 배우고 싶어진 된 계기는 유튜브에서 아래 동영상을  보고 

나도 저런 웹을 만들어 보고 싶어졌기 때문입니다.

뿐만 아니라 리액트(리액트 네이티브)로 개발해서 

앱으로도 출시가 가능할 수 있다는 설명을 보고 혹 하게 되었습니다.

과연 완성을 할 수 있을지는 이 연재가 끝나는 시점에 알게 되겠군요.

노마드 코더의 리액트 웹 서비스 만들기 



동영상에 대해서 요약을 하자면 

첫번째, 자바스크립트 기반이기 때문이다.

두번째, 구조가 간단하다. 요소별, 컴포넌트별로 나눠서 작업이 가능

세번째 ,단방향 데이터 플로우를 가지고 있다. 




그럼 이제부터 react에 대해서 알아보도록 하겠습니다.

네이버에 리액트 나 react 로  검색하면 마음에 드는 사이트를 찾을 수 없었습니다.

그래서 어쩔 수 없이 영어를 못해서 번역기능에만 의존하지만 

구글에서 검색해서 react 에 접속하게 되었습니다.






영어로 열심히 설명이 되어 있네요. 해석이 잘 안됩니다. 

그래서 번역기를 돌려 봅니다.



사용자 인터페이스 구축을 위한 javascript 라이브러리 라고 써 있네요.

한번 배우고 어디서나 쓸 수 있다는 말도 마음에 듭니다. 

시작을 해봐야 하니깐 get started ( 시작하다) 버튼을 눌러볼까요?

위에 화면에 빨간 테두리 부분입니다.




그 유명한 hello world 라는 메세지 출력해 보는 예제가 있네요. 

 설치를 해서 예제를 실행해도 되고, 

설치를 하지 않고도  실행해 볼 수 있는 사이트가 나와 있네요 . 

설치는 다음시간에 할 예정이니 설치를 하지 않고 실행해보겠습니다.

아래에 파란 블럭부분을 클릭하면 새로운 화면으로 넘어가집니다. 

( 클릭은 실제 사이트에서 수행하셔야 합니다;;)

The easiest way to get started with React is to use this Hello World example code on CodePen.



타이핑을 하지도 않았는데 hello world가 화면에 출력됩니다.

어떤 개발언어를 배워도 hello world만 출력할 줄 알면 반은 배웠다는 말을 

들어본 적있는데 벌써 반이나 진행되었습니다.
(혹시 저만 이런 말을 들어봤는지는 모르겠네요;;)

그래도 react를 배우려면 타이핑을 해보는게 좋겠죠? 

여러분도 마음대로 타이핑을 해보세요. 

저는 react왕초보를 출력해보겠습니다. 

아래 빨간 네모 부분에 써 주시기만 하면 됩니다. 





이렇게만 하고 첫 시간을 끝내기는 아쉬우니 하나만 더 실습을 해볼까요?

hello world 화면 오른쪽에 아래 글씨를 클릭해 봅니다. 빨간색 테두리 부분입니다.






화면 중간으로 내리다 보면 아래 글씨를 다시 클릭해서 실습을 할 수 있습니다. 




화면이 출력되면 위에 빨간색 부분에 원하는 메세지를 넣어보세요.  

firstName : 'React', lastName: '왕초보', <h1>안녕,

여러분들도 성공하셨나요?

간단한 내용들이지만 편집을 하면서 정리하려니 생각보다 시간이 오래 걸리네요.

연재를 하면서 점점 더 편집 속도가 빨라지기를 기대합니다. 


다음시간에는 개발환경 구성에 대해서 알아보도록 하겠습니다. 


전문성이 현저하게 떨어지고 , 편집능력도 부족하지만 긴 글 봐주셔서 고맙습니다. 


+ Recent posts