PropTypesは神器を検査して、あなたの書くbugをますます少なくならせます!
4909 ワード
注意:
React v 15.5から
自動変換を行うためのcodemodスクリプトを提供します.
あなたのアプリケーションがどんどん増えていくにつれて、多くのエラーがタイプ検査で捕獲できます.いくつかのアプリケーションに対しては、FlowやType ScriptなどJavaScript拡張を使って、アプリケーション全体をタイプチェックすることができます.これらの拡張機能を使わなくても、Reactにはいくつかのタイプの検査機能が内蔵されています.コンポーネントのpropsでタイプチェックを行うには、特定の
PropType
異なるベリファイアを使用する例を以下に示す.
特定の
原文のリンク:https://react.docschina.org/docs/typechecking-with-proptypes.html
React v 15.5から
React.PropTypes
は他のパケットに移動しました.代わりにprop-types
ライブラリを使ってください.自動変換を行うためのcodemodスクリプトを提供します.
あなたのアプリケーションがどんどん増えていくにつれて、多くのエラーがタイプ検査で捕獲できます.いくつかのアプリケーションに対しては、FlowやType ScriptなどJavaScript拡張を使って、アプリケーション全体をタイプチェックすることができます.これらの拡張機能を使わなくても、Reactにはいくつかのタイプの検査機能が内蔵されています.コンポーネントのpropsでタイプチェックを行うには、特定の
propTypes
属性を設定する必要があります.import PropTypes from 'prop-types';
class Greeting extends React.Component {
render() {
return (
Hello, {this.props.name}
);
}
}
Greeting.propTypes = {
name: PropTypes.string
};
PropTypes
は、コンポーネントが受信したデータのタイプが有効であることを保証するために使用できる一連の検証器を提供する.本例では、PropTypes.string
を使用した.着信prop
値タイプが正しくない場合、JavaScriptコンソールは警告を表示します.性能の観点から、propTypes
は開発モードでのみ検査を行う.PropType
異なるベリファイアを使用する例を以下に示す.
import PropTypes from 'prop-types';
MyComponent.propTypes = {
// JS ,
// 。
optionalArray: PropTypes.array,
optionalBool: PropTypes.bool,
optionalFunc: PropTypes.func,
optionalNumber: PropTypes.number,
optionalObject: PropTypes.object,
optionalString: PropTypes.string,
optionalSymbol: PropTypes.symbol,
// ( 、 、 )
// ( Fragment) 。
optionalNode: PropTypes.node,
// React 。
optionalElement: PropTypes.element,
// React ( ,MyComponent)。
optionalElementType: PropTypes.elementType,
// prop ,
// JS instanceof 。
optionalMessage: PropTypes.instanceOf(Message),
// prop ,
// 。
optionalEnum: PropTypes.oneOf(['News', 'Photos']),
//
optionalUnion: PropTypes.oneOfType([
PropTypes.string,
PropTypes.number,
PropTypes.instanceOf(Message)
]),
//
optionalArrayOf: PropTypes.arrayOf(PropTypes.number),
//
optionalObjectOf: PropTypes.objectOf(PropTypes.number),
//
optionalObjectWithShape: PropTypes.shape({
color: PropTypes.string,
fontSize: PropTypes.number
}),
// An object with warnings on extra properties
optionalObjectWithStrictShape: PropTypes.exact({
name: PropTypes.string,
quantity: PropTypes.number
}),
// PropTypes `isRequired` ,
// prop , 。
requiredFunc: PropTypes.func.isRequired,
//
requiredAny: PropTypes.any.isRequired,
// 。 Error 。
// `console.warn` , `onOfType` 。
customProp: function(props, propName, componentName) {
if (!/matchme/.test(props[propName])) {
return new Error(
'Invalid prop `' + propName + '` supplied to' +
' `' + componentName + '`. Validation failed.'
);
}
},
// `arrayOf` `objectOf` 。
// Error 。
// 。
//
// 。
customArrayProp: PropTypes.arrayOf(function(propValue, key, componentName, location, propFullName) {
if (!/matchme/.test(propValue[key])) {
return new Error(
'Invalid prop `' + propFullName + '` supplied to' +
' `' + componentName + '`. Validation failed.'
);
}
})
};
単一要素を制限するPropTypes.element
を通して、コンポーネントに伝達されるチルドレンには一つの要素しか含まれていないことを確認しても良い.import PropTypes from 'prop-types';
class MyComponent extends React.Component {
render() {
// , 。
const children = this.props.children;
return (
{children}
);
}
}
MyComponent.propTypes = {
children: PropTypes.element.isRequired
};
標準Prop値特定の
defaultProps
属性を設定することによって、props
のデフォルト値を定義することができます.class Greeting extends React.Component {
render() {
return (
Hello, {this.props.name}
);
}
}
// props :
Greeting.defaultProps = {
name: 'Stranger'
};
// "Hello, Stranger":
ReactDOM.render(
,
document.getElementById('example')
);
もしあなたがtranform-class-propertiesのBabel変換ツールを使っているなら、Reactコンポーネントクラスでも静的属性としてdefaultProps
を宣言することができます.この文法案は最終的に決まっていません.コンパイルをしてからブラウザで実行します.もっと多くの情報を知りたいなら、class fields proposalを見てください.class Greeting extends React.Component {
static defaultProps = {
name: 'stranger'
}
render() {
return (
Hello, {this.props.name}
)
}
}
defaultProps
は、親コンポーネントがその値を指定していない場合に、デフォルト値があることを確認するために使用される.this.props.name
タイプの検査はpropTypes
によって与えられた値の後に行われるので、タイプチェックもdefaultProps
に適用される.原文のリンク:https://react.docschina.org/docs/typechecking-with-proptypes.html