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

Reactjs React:无状态功能组件中的PropTypes,reactjs,react-proptypes,Reactjs,React Proptypes,在React中,我编写了一个无状态功能组件,现在想向其添加Prop类型验证 列表组件: 从“React”导入React; 从“道具类型”导入道具类型; 功能列表(道具){ const todos=props.todos.map((todo,index)=>({todo}); 返回(); } List.PropTypes={ todos:PropTypes.array.isRequired, }; 导出默认列表; 应用程序组件,呈现列表: 从“React”导入React; 从“./List”导入

在React中,我编写了一个无状态功能组件,现在想向其添加Prop类型验证

列表
组件:

从“React”导入React;
从“道具类型”导入道具类型;
功能列表(道具){
const todos=props.todos.map((todo,index)=>(
  • {todo}
  • ); 返回(
      ); } List.PropTypes={ todos:PropTypes.array.isRequired, }; 导出默认列表;
      应用程序
      组件,呈现
      列表

      从“React”导入React;
      从“./List”导入列表;
      类应用程序扩展了React.Component{
      构造函数(){
      超级();
      此.state={
      待办事项:'',
      };
      }
      render(){
      返回();
      }
      }
      导出默认应用程序;
      
      正如您在
      App
      中看到的,我正在将
      this.state.todos
      传递给
      列表
      。因为
      this.state.todos
      是一个字符串,所以我希望能够进行Prop类型验证。相反,我在浏览器控制台中得到一个错误,因为字符串没有名为
      map
      的方法


      为什么道具类型验证没有按预期工作?看一看,案例似乎是相同的。

      您应该将属性上的大小写更改为
      propTypes

      - List.PropTypes = {
      + List.propTypes = {
          todos: PropTypes.array.isRequired,
        };
      
      正确

      List.propTypes={
      todos:PropTypes.array.isRequired,
      };
      

      (PropTypes对象的实例是小写的,但类/类型是大写的。实例是
      List.PropTypes
      。类/类型是
      PropTypes

      快速简单,谢谢!我只是忽略了这一点,d'oh。为了阐明这种肮脏的错误,如果有人关心区别,你可以使用,
      List.propTypes
      实际上不是
      propTypes
      的实例。它是一个普通的javascript对象。事实上,
      PropTypes
      甚至不是一个类:它也是一个对象。这个答案中的实例不是面向对象的意思,类是对象