React:无状态功能组件中的PropTypes

Sve*_*ven 36 reactjs react-proptypes

在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;
Run Code Online (Sandbox Code Playgroud)

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;
Run Code Online (Sandbox Code Playgroud)

正如你所看到的App,我正在传递this.state.todos给你List.既然this.state.todos是一个字符串,我期望启动Prop Type验证.相反,我在浏览器控制台中收到错误,因为字符串没有调用的方法map.

为什么Prop Type验证不能按预期工作?羚牛一看这个问题,案子似乎完全相同.

Bha*_*lli 71

你应该改变

List.PropTypes = {
  todos: PropTypes.array.isRequired,
};
Run Code Online (Sandbox Code Playgroud)

List.propTypes = {
  todos: PropTypes.array.isRequired,
};
Run Code Online (Sandbox Code Playgroud)

(PropTypes对象的实例是小写,但Class/Type是大写.实例是.Class List.propTypes/ Type是PropTypes.)

  • 要阐明这种脏错误,可以使用https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-typos.md (3认同)