📅  最后修改于: 2020-12-19 03:53:39             🧑  作者: Mango
道具是将只读属性传递给React组件的重要机制。通常需要道具在组件中正确使用。如果使用不正确,则组件可能无法正常工作。因此,需要使用道具验证来改善反应成分。
道具验证是一种可帮助开发人员避免将来出现错误和问题的工具。这是强制正确使用组件的有用方法。它使您的代码更具可读性。 React组件使用特殊属性PropTypes来帮助您通过验证通过props传递的值的数据类型来捕获错误,尽管不必使用propTypes定义组件。但是,如果将propTypes与组件一起使用,则可以帮助您避免意外的错误。
App.propTypes用于在react组件中进行道具验证。当某些道具以无效类型传递时,您将在JavaScript控制台上收到警告。指定验证模式后,将设置App.defaultProps。
class App extends React.Component {
render() {}
}
Component.propTypes = { /*Definition */};
ReactJS props验证器包含以下验证器列表。
SN | PropsType | Description |
---|---|---|
1. | PropTypes.any | The props can be of any data type. |
2. | PropTypes.array | The props should be an array. |
3. | PropTypes.bool | The props should be a boolean. |
4. | PropTypes.func | The props should be a function. |
5. | PropTypes.number | The props should be a number. |
6. | PropTypes.object | The props should be an object. |
7. | PropTypes.string | The props should be a string. |
8. | PropTypes.symbol | The props should be a symbol. |
9. | PropTypes.instanceOf | The props should be an instance of a particular JavaScript class. |
10. | PropTypes.isRequired | The props must be provided. |
11. | PropTypes.element | The props must be an element. |
12. | PropTypes.node | The props can render anything: numbers, strings, elements or an array (or fragment) containing these types. |
13. | PropTypes.oneOf() | The props should be one of several types of specific values. |
14. | PropTypes.oneOfType([PropTypes.string,PropTypes.number]) | The props should be an object that could be one of many types. |
在这里,我们正在创建一个App组件,其中包含我们需要的所有道具。在此示例中, App.propTypes用于道具验证。为了验证道具,您必须添加以下行:从App.js文件中的“道具类型”导入道具类型。
App.js
import React, { Component } from 'react';
import PropTypes from 'prop-types';
class App extends React.Component {
render() {
return (
ReactJS Props validation example
Type
Value
Valid
Array
{this.props.propArray}
{this.props.propArray ? "true" : "False"}
Boolean
{this.props.propBool ? "true" : "False"}
{this.props.propBool ? "true" : "False"}
Function
{this.props.propFunc(5)}
{this.props.propFunc(5) ? "true" : "False"}
String
{this.props.propString}
{this.props.propString ? "true" : "False"}
Number
{this.props.propNumber}
{this.props.propNumber ? "true" : "False"}
);
}
}
App.propTypes = {
propArray: PropTypes.array.isRequired,
propBool: PropTypes.bool.isRequired,
propFunc: PropTypes.func,
propNumber: PropTypes.number,
propString: PropTypes.string,
}
App.defaultProps = {
propArray: [1,2,3,4,5],
propBool: true,
propFunc: function(x){return x+5},
propNumber: 1,
propString: "JavaTpoint",
}
export default App;
Main.js
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App.js';
ReactDOM.render( , document.getElementById('app'));
输出:
ReactJS允许创建一个自定义验证函数来执行自定义验证。以下参数用于创建自定义验证函数。
var Component = React.createClass({
App.propTypes = {
customProp: function(props, propName, componentName) {
if (!item.isValid(props[propName])) {
return new Error('Validation failed!');
}
}
}
})