【React】propTypesを使って受け取ったpropsの型を定義する

propTypesによって、propsから受け取る値のタイプを定義することができます。
エラーは出ませんが、警告を出してくれます。
バリデーションのような感じで使えます。

import React from 'react';
import PropTypes from 'prop-types'; // インポートする

const App = () => {
  const details = [
    {name: "Meow", age: 10},
    {name: "Hanada", age: 20}
  ]
  return (
    <div>
      {
        details.map((detail, index) => {
          return <Cat name={detail.name} age={detail.age} key={index}/>
        })
      }
    </div>
  )
}

const Cat = (props) => {
  return <div>My name is {props.name}.My age is {props.age}</div>
}

// propTypesでpropsの型を定義する
Cat.propTypes = {
  name: PropTypes.string,
  age: PropTypes.number.isRequired
}

export default App;

propTypesの部分の解説をします。

  name: PropTypes.string,

上記では、nameというpropsプロパティではstring型(文字列型)のものしか受け付けないという設定にしています。

  age: PropTypes.number.isRequired

上記では、ageというpropsプロパティではnumber型(数字型)のものしか受け付けないという設定とともに、isRequiredで「絶対に値を設定しなければならない」というルールを定めています。

上記全てのルールを破ってみましょう。

// 省略
const App = () => {
  const details = [
    {name: 10, age: "ageage"},
    {name: "Tarou"},
  ]
// 省略

すると以下のような警告がコンソールに吐き出されました。
f:id:nekorokkekun:20190917140142p:plain

出力はされているものの、定義したデータ型とは異なるという警告になっていますね。