Reactでは、ステートレス機能コンポーネントを作成しましたが、Prop Type検証を追加したいと考えています。
List
コンポーネント:
import React from 'react';
import PropTypes from 'prop-types';
function List(props) {
const todos = props.todos.map((todo, index) => (<li key={index}>{todo}</li>));
return (<ul></ul>);
}
List.PropTypes = {
todos: PropTypes.array.isRequired,
};
export default List;
App
コンポーネント、レンダリングList
:
import React from 'react';
import List from './List';
class App extends React.Component {
constructor() {
super();
this.state = {
todos: '',
};
}
render() {
return (<List todos={this.state.todos} />);
}
}
export default App;
App
でわかるように、this.state.todos
からList
へ。 this.state.todos
は文字列です。PropType検証が開始されると予想しました。代わりに、文字列にはmap
というメソッドがないため、ブラウザコンソールにエラーが表示されます。
Prop Type検証が期待どおりに機能しないのはなぜですか? この質問 を見てください。ケースは同じようです。
変更する必要があります
List.PropTypes = {
todos: PropTypes.array.isRequired,
};
に
List.propTypes = {
todos: PropTypes.array.isRequired,
};
(PropTypesオブジェクトのinstanceは小文字ですが、クラス/タイプは大文字です。インスタンスはList.propTypes
。クラス/タイプはPropTypes
です。)