eslint react/prop-types の対応
やりたい事
import React from "react"; const Header = (props) => { return ( <header className="App-header"> <h2>{props.text}</h2> </header> ); }; export default Header;
上記のコードは下記のエラーが発生する。
'text' is missing in props validation
これはprops
にtext
が存在するか検証されていないため発生している。
そのため、propTypes
でtext
の型チェックを行う。
PropTypesによる型チェック
import React from 'react'; +import PropTypes from 'prop-types'; const Header = (props) => ( <header className="App-header"> <h2>{props.text}</h2> </header> ); +Header.propTypes = { + text: PropTypes.string, +}; export default Header;
PropTypesによる型チェックを追加すると、下記2件のエラーが発生する。
Must use destructuring props assignment eslint(react/destructuring-assignment) propType \"text\" is not required, but has no corresponding defaultProps declaration. eslint(react/require-default-props)
react/destructuring-assignment
は直接プロパティにアクセスしているために発生しているエラー(破壊的割り当て)
react/require-default-props
は必須ではないプロパティが初期値不明のため発生しているエラー。
そのため、ES6の分割代入でプロパティの値を取り出して、初期値を設定する必要がある。
参考 MDN分割代入
分割代入でプロパティの変数を取り出す
import React from 'react'; import PropTypes from 'prop-types'; +const Header = (props) => { + const { text } = props; + + return ( <header className="App-header"> + <h2>{text}</h2> </header> + ); +}; Header.propTypes = { text: PropTypes.string, }; export default Header;
プロパティの初期値を設定
import React from 'react'; import PropTypes from 'prop-types'; const Header = (props) => { const { text } = props; return ( <header className="App-header"> <h2>{text}</h2> </header> ); }; Header.propTypes = { text: PropTypes.string, }; +Header.defaultProps = { + text: 'default text', +}; export default Header;
以上でエラーが消えて、プロパティの値が安全になったコンポーネントが完成