Reactjs React:无状态功能组件中的PropTypes
在React中,我编写了一个无状态功能组件,现在想向其添加Prop类型验证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”导入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
甚至不是一个类:它也是一个对象。这个答案中的实例不是面向对象的意思,类是对象