[What Is React?]


공식 홈페이지 링크 주소 : https://reactjs.org/tutorial/tutorial.html#what-is-react

React는 사용자 인터페이스(UI)를 구축하기위한 

선언적이고 효율적이며 유연한 JavaScript 라이브러리이다. 

이 도구를 사용하면 "구성 요소(Component)"라는 작고 분리된 코드 조각으로 

복잡한 UI를 작성할 수 있다. 기본 예제는 다음과 같다.


class ShoppingList extends React.Component {
render() {
return (
<div className="shopping-list">
<h1>Shopping List for {this.props.name}</h1>
<ul>
<li>Instagram</li>
<li>WhatsApp</li>
<li>Oculus</li>
</ul>
</div>
);
}
}

위와같이 재미있는 XML과 유사한 태그를 사용할 것이다. 

컴포넌트를 사용하여 React에게 화면으로 보고 싶은 것을 알려준다.  

데이터가 변경되면 React는 효율적으로 Component를 업데이트하고 다시 렌더링한다.

여기서 ShoppingList는 React Component 클래스 또는 React Component 유형이다. 

Component는 props ("속성[properties]"의 약자)라는 매개 변수를 사용하고,

render 메서드를 통해 표시 할 뷰의 계층을 반환한다.

render 메서드는 화면에 표시 할 내용에 대한 설명을 반환한다.

React는 설명을 취해 결과를 표시한다. 

특히, render는 React 요소를 반환하는데, 이것은 렌더링 할 내용에 대한 간단한 설명이다. 

대부분의 React 개발자는 "JSX"라는 특수 구문을 사용하여 이러한 구조를보다 쉽게 ​​작성한다. 

<div /> 구문은 빌드시 React.createElement ('div')로 변환됩니다. 위의 예는 다음과 같다.


return React.createElement('div', {className: 'shopping-list'},
React.createElement('h1', /* ... h1 children ... */),
React.createElement('ul', /* ... ul children ... */)
);

createElement ()에 대한 자세한 내용은 API 참조 문서에서 확인할 수 있지만 

이 튜토리얼에서는 사용하지 않을 것이다. 대신에 JSX를 계속 사용할 것이다.

JSX는 JavaScript의 모든 기능을 제공한다. 

JSX 내부의 중괄호 안에 JavaScript 표현식도 넣을 수 있다. 

각 React 요소는 변수에 저장하거나 프로그램에서 전달할 수있는 JavaScript 객체이다.

위의 ShoppingList 구성 요소는,

 <div /> 및 <li />와 같은 HTML에서 사용되는 기본 제공 DOM 구성 요소 만 렌더링한다. 

그러나 사용자 정의 React 구성 요소도 작성하고 렌더링 할 수 있다. 

예를 들어 ShoppingItem이라는 컴포넌트를 생성하여, 이 컴포넌트를 호출하여 사용할 수 있다.

<ShoppingItem />과 같이 작성하면 된다. 이렇게 하면, 쇼핑 항목을 참조 할 수 있다. 

각 React 구성 요소는 캡슐화되어 독립적으로 작동 할 수 있다. 

이를 통해 간단한 구성 요소를 조각조각 모아 하나의 복잡한 UI를 작성할 수 있게 된다.


 









Posted by sungho88
,

render{

    const {datas} = this.props;   

 return (

        <ul>

            {

                this.props.datas.map(data => {

                    return <li key={data.id}><a href='/url/' + {data.id}>{data.title}</a></li>

                }

            }

        </ul>

    );

}



<a href='/url/' + {post.id}>


이 부분을 map 함수 실행되는 동안 고유의 값(id)으로 변경하면서 링크를 생성하고 싶다.


아무리 href속성에서 +를 쓰려해봐도 에러나고, 어떻게 값을 문자열로 변경하여 붙일 수 있을까?



href={'/url/' + data.id}


이렇게 하면 된다.


{} 한 뒤에 그 안에 문자열 + data.id로 작성하면 문자열로 변환되어 map함수로 실행하면 정상적으로 작동된다.


Posted by sungho88
,

리액트 공식 홈페이지


리액트 예제는 


실습 위주의 예제와,


개념(Concept) 위주의 예제로 구분되어 설명된다.


실습 위주의 예제는 Tic Tac Toe 게임을 만들어보며 개념을 익힐 수 있게 된다.


Setup for the Tutorial will give you a starting point to follow the tutorial.


Overview will teach you the fundamentals of React: components, props, and state.

Completing the Game will teach you the most common techniques in React development.

Adding Time Travel will give you a deeper insight into the unique strengths of React.


자바스크립트 개념 설명


이것 역시 영어 사이트이다. 


개발자 영어가 필요한 이유를 또한번 느꼈다.


최근에 올라온 한글 버전 블로그도 찾았다.


React 예제 한글화


  

개발은 하는 것은


브라우저에서 하는 것이 매우 쉽게 할 수 있고, 로컬에서 코드를 작성할 수도 있다.


브라우저에서 하는 것은 Codepen을 사용한다.


개인 PC에서 개발하기 위해서는 리액트를 별도로 설치해줘야 한다.


리액트 설치


0. 최신 버전의 Node.js가 설치되어 있는지 확인하고, 설치해둔다.


1. 리액트를 설치한다.

$ npm install -g create-react-app


2. 리액트 프로젝트를 생성 및 세팅한다. my-app이라는 폴더에 설치가 될 것이다.

$ create-react-app my-app


























Posted by sungho88
,

[React] TypeError: Cannot read property 'map' of undefined


에러가 빈번하게 나온다.


이것의 의미는 map을 할 수 없다는 것이다.


state 등에 있던 배열이 이동했거나 삭제되어 


.map을 사용할 수 없을 때 이런 에러가 발생한다.


따라서, 


xxx.map이라면


xxx가 어디있는지 체크해줘야 한다.

Posted by sungho88
,

부모 컴포넌트에서 자식 컴포넌트로 데이터를 넘겨려면

 

props를 사용한다고 했다.

 

부모(App.js)에서 아래와 같이 배열을 선언한다.

 
const movies = [
{title:"Oldboy", view:"2000"},
{title:"Star Warz", view:"5000"},
{title:"Mad Max", view:"7000"},
{title:"Inception", view:"12000"}
 
]

 

기존에는 화면에 나오는지 테스트하기 위해 

 

render() 내 다음과 같이 작성했었다.

 

 
     <Movie title={movies[0]}/>
<Movie title={movies[1]}/>
<Movie title={movies[2]}/>
<Movie title={movies[3]}/>

 

이렇게 작성을 했다면, Movie 컴포넌트가 정상적으로 화면에 4번 출력될 것이다.

 

물론, Movie에서 this.props.title로 받아주었을때 말이다

 

return (
<div>
<h3>Movie title is a {this.props.title}</h3>
</div>
)

 

하지만, 이렇게 일일히 Movie 태그를 작성하는 것은 비효율적이다. 만약 데이터가 1000개라면?

 

1000번 복붙을 해야할 것이다. 이것은 말이 안된다.

 

또한, 몇 개를 사용할 지 모르는 경우가 있다. 이럴 경우 어떻게 할까?

 

마치 for문, while문을 안 쓰고 배열을 일일히 생성하는 것과 동일하다.

 

이 때 사용하는 것이 바로 map()함수이다.

 

이것은 자바스크립트 문법이므로 모든 배열은 map함수를 갖고 있기때문에 그냥 사용하면 된다.

 

 
{movies.map(movie => {
return <Movie title={movie.title} view={movie.view} />
})}

 

movies 배열을 가져와서 mapping을 한 뒤, 새로운 배열을 만든다..

 

요소는 movies 배열 안에 있는 <Movie>가 될 것이다.

 

이렇게 하면, movies 배열안에 들어있는 갯수만큼 출력된다.

 

그런데 말입니다.

 

정상적으로 나오긴 하지만, 갑자기 구글 개발자 콘솔에서 에러가 보이기 시작한다.

 

기존에 복붙할때는 보이지 않던 에러이다.

 

Each child in an array or iterator should have a unique "key" prop.

 

 

array안에 있는 차일드들은 고유한(unique) key prop을 가져야 한다.

 

리액트에서는 엘리먼트가 많을 경우 고유한 key라는 것을 정해주어야한다.

 

그래서, movies 배열에 id라는 것을 하나 더 만든후, 중복되지 않게 작성해주자.

 

const movies = [
{id:1, title:"Oldboy", view:"2000"},
{id:2, title:"Star Warz", view:"5000"},
{id:3, title:"Mad Max", view:"7000"},
{id:4, title:"Inception", view:"12000"}
]

 

 

{movies.map(movie => {
return <Movie title={movie.title} view={movie.view} id={movie.id} />
})}

 

이렇게 했는데, 에러가 없어지지 않는다.

map도 일부를 변경해주어야한다.

 

{movies.map((movie, index) => {
return <Movie title={movie.title} view={movie.view} key={index} />
})}

 

위와 같이 변경해주면, 에러가 사라진다.

 

 

props의 형태를 지정해두고 싶을때는 어떻게 할까?

 

제목title인데 숫자나 true/false가 출력된다거나,

관객수view인데 문자열만 출력되다거나 하는 상황을 방지하려면 어떻게 할까?

 

바로 props-type이라는 패키지를 설치해주면 된다.

 

$ yarn add prop-types

또는

$ npm install prop-types 

 

 

https://www.10000duck.com/view_duck/43

 

10000duck - KBS 동행 제325화 유라의 행복한 부엌

온라인 모금함을 통해 기부하세요.

www.10000duck.com

 

Posted by sungho88
,

설치할 때, 


create-react-app styleTest


로 하면 오류가 발생하며 생성할 수 없다.


무조건 


소문자를 사용해야 한다.



styletest로 변경후 설치한다.


그러면, styletest이 만들어지고 그곳에 리액트가 설치된다.


그러면 


$ cd styletest를 입력한다.


그리고,


styletest 폴더 이동 후 code .으로 바로 vs code 에디터를 열 수 있다.


atom . 도 가능하다!


그러면 



기본 구조가 위와 같이 생성된다.





Posted by sungho88
,

react-bootstrap-table을 사용하려고한다.


react에서도 <table>로 코딩이 가능하지만, 좀 더 간편하게 npm이 제공된다.


간단하게 멋진 테이블 생성이 가능하다.


사용법은 홈페이지를 참고하자.


홈페이지

1. 터미널에 npm 설치한다.


$ npm i react-bootstrap-table --save


이렇게 설치를 한뒤, 컴포넌트.js에 들어가서... 사용하기 위해서


2. import를 해준다.


import { BootstrapTable, TableHeaderColumn } from 'react-bootstrap-table';



!!!!!!!!!!!


오류 발생...


테이블이 아무리 해도 안 나온다.


데이터 리스트는 나오는데.... 왜 CSS 적용이 안 되는 것인가?


생각해보니 Bootstrap을 적용해야만 할 것 같은데 어떻게 적용할까?


1) public - index.html에 링크와 스크립트를 추가해준다. 당연히 <head> 태그 사이에..

  

  <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">

  <script src="http://code.jquery.com/jquery-2.1.3.min.js"></script>

  <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.js"></script>  


그 다음에, 다시 실행하면?


적용된다!


기본 테이블 보여주는 코드는 다음과 같다.



import { BootstrapTable, TableHeaderColumn } from 'react-bootstrap-table';
import './node_modules/react-bootstrap-table/dist/react-bootstrap-table-all.min.css';

class Table extends React.Component {
render() {
return (
<BootstrapTable data={ products }>
<TableHeaderColumn dataField='id' isKey>Product ID</TableHeaderColumn>
<TableHeaderColumn dataField='name'>Product Name</TableHeaderColumn>
<TableHeaderColumn dataField='price'>Product Price</TableHeaderColumn>
</BootstrapTable>
);
}
}


이렇게 하면, 기본 테이블이 예쁘게 커스텀되어 나온다.

그리고 다양한 기능들을 적용할 수 있다.


바로 이 사이트에서 



참고로, 그냥 HTML 테이블 Table Tag로 그냥 만들고 싶다면 다음과 같이 작성하면 된다.



render() {
return (
<div className="customers">
<h2>Customers</h2>

<table className="tablecss table">
<thead>
<tr>
<th>이름</th>
<th>나이</th>
<th>성별</th>
</tr>
</thead>
<tbody>
<tr key={customer.id}>
<td>HONG's</td>
<td>22</td>
<td>남자</td>
</tr>
</tbody>
</table>
</div>
);
}


이렇게 하면, 테이블이 생성된다.

Bootstrap을 적용하는 방법은 상단에 



import 'bootstrap/dist/css/bootstrap.min.css';
import './customers.css';


을 해주면 되고, 테이블을 꾸며주는 css 파일도 import하면 된다.


이렇게하면,


테이블 완성!


css파일에서 부를때는 class가 아니라  className임을 주의하자.

Posted by sungho88
,

state는 무엇인가?


- 컴포넌트 내부에서 자체적으로 읽고, 업데이트할 수 있는 값을 사용하기 위해 state가 존재한다.

- 모든 리액트 컴포넌트 안에 존재할 수 있는 오브젝트이다(필수는 아니므로 없어도 된다)

- 컴포넌트 내 state가 변경될때마다 해당 컴포넌트는 다시 렌더링된다(=render()함수가 실행된다)


state를 선언하는 방법


원래는 생성자(constructor) 안에 선언해야 하지만, 생성자 밖에 다음과 같이 선언할 수 있다.


state = {
greeting:"Hello World"
}


이런 형식으로 작성을 하고, 사용할때는 


render() {
return (
<div className="App">
<h1>Helio</h1>
{this.state.greeting}
</div>
);
}


이런식으로 호출해서 사용하며 결과는 다음과 같다.




state를 수정하는 방법(업데이트 하는 방법)


this.state.greeting = "Hello Jang";    


쉽게 생각하면 이렇게 직접 수정하면 될 것 같지만 직접적인 접근은 절대 안된다.


직접적으로 변경하면 render() 설정들이 작동을 하지 않으므로 값은 바뀌지 않는다(리-렌더링이 되지 않는다)


위와같이 코드를 실행하면 다음과 같은 경고가 발생한다.


Compiled with warnings.


./src/App.js

  Line 19:  Do not mutate state directly. Use setState()  react/no-direct-mutation-state


그러므로,  다이렉트로 state값을 수정해서는 안 되며, 


아래와 같이 setState()를 사용하여 값을 변경해야 한다.



this.setState({
greeting: "Hello Jang"
})


변경을 하려면, 이렇게 setState()를 사용한다. 그래야 render()가 정상적으로 리렌더링된다.


즉, setState가 사용되어 state를 변경하면 render()함수가 정상적으로 재작동하게 되며,


state의 값은 새롭게 변경된다. this.setState({}) 으로 기억해두자. 


메소드 ()안에 객체{} 값이 들어가니까..


항상 아래와 같은 구조를 지닌다.


this.setState({

...

.....

})


setState()메소드의 역할은 파라미터로 전달받은 필드를 업데이한 뒤, 컴포넌트가 리렌더링하게 한다.


만약, 렌더링 된 후 몇 초 후에 state값을 바꾸고 싶다면 어떻게 할까?


자바스크립트 문법 중 setTimeout() 함수를 사용하면 된다.


componentDidMount() {
setTimeout(() => {
this.setState({
// state 변경
})
}, 2000) // 시간. 2초 후 실행
}


위 코드는 setTimeout() 함수를 사용하여 2초 후에 setState()메소드를 사용하여 state를 변경하는 코드이다.


setTimeout() 함수를 사용하여 state 내 배열에 항목을 추가하려면 어떻게 할까?


state = {
person:[
{id:1, name:"JANG", age:"21"},
{id:2, name:"HONG", age:"32"},
{id:3, name:"KIM", age:"41"},
{id:4, name:"PARK", age:"55"}
]
}


componentDidMount() {
setTimeout(() => {
this.setState({
movies: [
...this.state.person,
{
name:"SUNGHO",
age:"120",
id:5
}
]

})
}, 2000)
}


2초 후에 person 목록에 추가된다.


그런데, 주의할 점이 있다. 


배열안에


...this.state.person


을 써줘야한다. 이것을 해야 기존 배열이 살아있고, 그 뒤에 추가가 되는 것이다.


이것을 써주지 않으면 person이라는 배열은 기존값들이 전부 사라지고 추가한 항목만 남게 된다.



state와 prop의 가장 큰 차이점은


props는 부모 컴포넌트가 설정하고, 해당 컴포넌트는 받아서 사용하는 "읽기 전용",


state는 해당 컴포넌트가 자체적으로 지난 값으로, 읽을수 있을뿐만 아니라 값을 업데이트하는 기능.

 

Posted by sungho88
,

1) 컴포넌트 라이프사이클(Component Lifecycle) : 렌더링


컴포넌트는 생성되면서부터 여러 기능들을 정해진 순서대로 실행하는데 


이것을 Component Lifecycle이라 부른다.


컴포넌트 수명은 페이지 렌더링 되는 순간 시작해서, 페이지가 사라질 때 끝난다.


즉, render를 통해 우리에게 보여주고 그 다음 흐름까지 정해진 함수들이 존재한다.


이것은 개발자가 고려하지 않아도 자동으로 진행된다.


따라서, 반드시 구현해야 하는 메소드는 아니므로, 원할때 클래스 안에서 호출하여 사용하면 된다.


1) constructor(props)


constructor(props) {
super(props);
console.log('[App.js] Inside Constructor')
  state = {
persons: [
{ name: 'SUNG', age: 10 },
{ name: 'JANG', age: 25 },
{ name: 'Ho', age: 40 }
]
showPersons: false
}
}


2) componentWillMount()


3) render()


4) componentDidMount()


순서는 위와 같다. 콘솔로 확인을 해보면,


componentWillMount() {
console.log('[App.js] - componentWillMount()')
}

componentDidMount() {
console.log('[App.js] - componentDidMount()')
}

render () {

console.log('[App.js] - render()')

}



이렇게 구글 개발자 콘솔에서 확인할 수 있다.




메서드는 엄청 많다.


그 중에서, 


Will~~~ 붙은 것은 어떤 작업을 하기 전에 실행되는 메소드이며,

Did~~~ 가 붙은 것은 어떤 작업을 작동한 후에 실행되는 메소드이다.


라이프 사이클(Life Cycle)은 마운트, 업데이트, 언마운트 카테고리로 나눠진다.



01) 컴포넌트 라이프사이클(Component Lifecycle) : 마운트


DOM이 생성되고, 웹 브라우저상에 나타나는 것을 마운트(Mount)라고 한다.


마운트될 때, 호출하는 메소드는 다음과 같다.


1. constructor

- 컴포넌트를 새로 만들때마다 호출되는 클래스 생성자 메소드.


2. getDerivedStateFromProps



01) 컴포넌트 라이프사이클(Component Lifecycle) : 마운트


업데이트할때는 4가지 경우이다.


1. props가 변경될 때

2. state가 변경될 때

3. 부모 컴포넌트가 변경될 때

4.. this.forceUpdate로 강제로 렌더링할 때


Posted by sungho88
,

[React] 02) 리액트(React) 설치 방법 및 구조

 

위 링크에서 리액트를 설치했다면, 아래와 같은 src 폴더를 볼 수 있다.

 



기본적으로 루트 컴포넌트는 <App /> 이며, 파일 경로는 src/App.js이다.


이 컴포넌트에 다른 컴포넌트를 불러와서 사용하게 된다. 


불러오는 방법은 다음과 같다.  먼저 코드를 확인하자.


App.js

import React, { Component } from 'react';
import Basic from './components/Basic';

class App extends Component {
render() {
return (
<div className="App">
<Basic />
</div>
);
}
}

export default App;


두 줄만 추가하면 된다.


1. import Basic from './components/Basic';


2. <Basic /> 



import Basic from './components/Basic';  


위 문장은 App.js에서 다른 컴포넌트를 불러와서 사용한다고 선언한 것이다.


Basic 컴포넌트를 보여줄 것이므로 이 컴포넌트가 어디에 위치한 컴포넌트인지 정의하는 것이다.


이 과정을 생략하면, 어디서 불러오는 컴포넌트인지 알지 못하기 떄문에 에러가 발생한다.


불러온 컴포넌트를 화면에 보여주는 코드가 바로 


<Basic /> 이다. 


마치 HTML 같아보이지만 JSX 문법이다. 


저렇게 쓰면, Basic 컴포넌트가 화면에 렌더링된다.


참고로 Basic.js는 다음과 같다.


Basic.js

import React, { Component, PropTypes } from "react";

class Basic extends Component {
render() {
return (
<div>
<h1>나의 이름은 {this.props.name} 라고 한다!</h1>
</div>
);
}
}
export default Basic;


결과는 아래와 같다.



나의 이름은 라고 한다!



<h1> 태그를 사용했기 때문에, 굵은 제목의 텍스트가 정상적으로 출력된 것을 볼 수 있다. 근데 뭔가 이상하다.


{this.props.name} 부분이 나오지 않았다.


왜냐하면, {this.props.name}는 텍스트가 아니기 때문이다. 


JSX에서 중괄호 { }는 이용해서 변수, 함수 등 문자열이 아닌 여러 표현식(자바스크립트)을 사용하기 위해 사용된다.


그렇다면 this.props.name은 어디서 나온 것이며, 왜 아무것도 나오지 않는 것인가?


props는 properties를 줄인 표현으로 부모 컴포넌트로부터 물려받는 속성이다. 


클래스 컴포넌트에서 props에 접근하기 위해서는 this 키워드를 사용하면 된다.


이 props값은 해당 컴포넌트를 불러와서 사용하는 부모 컴포넌트에서만 설정할 수 있다. 


이 props라는 개념을 통해 부모 컴포넌트와 소통할 수 있다. 여기서 부모 컴포넌트는 App.js이다.


(해당 컴포넌트를 사용하는 컴포넌트를 부모라 부른다.)


부모 컴포넌트에서 전달하는 props가 바뀌면 자동으로 업데이트된다.


이것이 리액트가 동적으로 컴포넌트 값을 변경할 수 있게 해주는 핵심 개념이다.


하지만, 자식 컴포넌트 자신은 해당 props를 읽기 전용으로만 사용할 수 있으므로 제한적이라고 할 수 있다.


따라서, App.js 에서 <Basic /> 부분을 다음과 같이 추가한다.


<Basic name="Gil-Dong Jang"/>


이렇게 HTML 태그 속성 작성하듯 해주면, Basic에서는 props 값이 전달되고 값을 읽어들여 다음과 같이 출력된다.


(참고)


문자열 이외 다른 종류의 값을 컴포넌트에 전달할때는 반드시 { } 중괄호로 감싸야한다. 그렇지 않으면 에러가 발생한다. 



나의 이름은 Gil-Dong Jang라고 한다!





[defaultProps]


또는, 자식 컴포넌트에서 props의 기본값을 설정 해놓을 수 있다.


만약, 부모인 App.js에서 실수로 props 를 빠트리거나 특정 상황에서 props를 일부러 비워두어야 할 때 유용하게 사용할 수 있다.


이것을 사용하면, 부모에서 name 값을 보내주지 않아도 정상적으로 기본값이 나오므로 이상한 문장( = 나의 이름은 라고 한다!) 을 방지할 수 있다.


import React, { Component, PropTypes } from "react";


class Basic extends Component {
render() {
return (
<div>
<h1>나의 이름은 {this.props.name} 라고 한다!</h1>
</div>
);
}
}


Basic.defaultProps = {
name :"Jang"
}
export default Basic;


위는 동일하고, 아래와 같이  class 밖에 하단에 다음과 같이 defaultProps를 정의해주면 된다.



Basic.defaultProps = {
name :"Jang"
}


이러고,


<Basic />


으로 name 속성을 빼게 되면,


나의 이름은 Jang라고 한다!


과 같이 정상적으로 출력된다. 이외에도 클래스 내부에서 정의하는 방법이 있다.


class 밑에



static defaultProps = {
name : 'Jang',
}


이렇게 하더라도, 동일한 결과가 나온다.


static을 붙이지 않으면 보이지 않는다는 점 명심하자.


 



[propsTypes]


컴포넌트의 필수 props를 지정하거나,

원하는 props 타입을 지정하고자한다면 propsTypes를 사용한다.

사용법은 defaultProps와 동일하다.


먼저, 



import PropTypes from 'prop-types';


을 선언한다.


그 다음 defaultProps와 동일한 위치에 사용한다.



Test.propTypes = {
name: PropTypes.string.isRequired
};



이렇게 작성하거나,


클래스 아래,


static propTypes = {
name: PropTypes.string
}


와 같이 작성하면 된다.


name은 props의 이름이며,


PropTypes.string의 경우 props의 타입을 의미한다.


PropTypes.string의 경우 props의 타입을 문자열로 설정하겠다는 의미이다.


만약 숫자를 입력하려고하면 에러가 발생한다.


자세히 말하면, 화면에 성공적으로 결과는 출력된다.


하지만, 콘솔창을 열어보면 에러가 발생한 것을 볼 수 있다.


index.js:1452 Warning: Failed prop type: Invalid prop `name` of type `number` supplied to `Test`, expected `string`.

    in Test (at App.js:9)

    in App (at src/index.js:7)





isRequired 의 경우, props를 지정하지 않았을 경우 발생하는 것이다.

즉, 필수적으로 props를 보내야하는 것을 isRequired 로 선언한다.





Posted by sungho88
,