데이터 배열을 리액트에서 랜더링 할때는 자바스크립트 내장함수인 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에 대해 알아보려고 합니다.


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




+ Recent posts