功能性无状态组件中的PropTypes


Answers:


141

官方的文档显示如何使用ES6组件类做到这一点,但同样适用于无状态的功能组件。

首先,npm install/ 如果尚未yarn add安装新的prop-types包

然后,在定义无状态功能组件之后,在导出之前,添加您的propTypes(如果需要,还可以使用defaultProps)。

import React from "react";
import PropTypes from "prop-types";

const Header = ({ name }) => <div>hi {name}</div>;

Header.propTypes = {
  name: PropTypes.string
};

// Same approach for defaultProps too
Header.defaultProps = {
  name: "Alan"
};

export default Header;

这样做有什么好处?没有定义的propTypes也可以使用。
Yarik

谢谢,我认为这仅适用于类组件。
道格

1
@Yarik通过使用propTypes可以为您完成一些自动检查。每当您的代码“违反合同”时,您都会得到警告。
Iulius Curt

26

有状态的没有什么不同,您可以像这样添加它:

import PropTypes from 'prop-types';
Header.propTypes = {
  title: PropTypes.string
}

这是道具类型 npm 的链接


2
虽然,如果您使用的是React的最新版本,则希望自己导入PropTypes,在这种情况下,您可能希望先退出,React然后title: PropTypes.string
再试

1

与基于类的组件相同的方法:

   import PropTypes from 'prop-types';

   const funcName = (props) => {
       ...
   }
   funcName.propTypes = {
       propName: PropTypes.string.isRequired
   }

注意:您可能必须prop-types通过npm install prop-types或安装yarn add prop-types,具体取决于您使用的React版本。


0

与使用基于类的组件的方法相同

import PropTypes from "prop-types";

    const = function_name => {}

    function_name.propTypes = {
       prop_name : PropTypes.number
       . . . . . . . . . . . . . .
    }

希望这可以帮助 !


0

React 15开始,用于propTypes验证道具并以这种方式提供文档:

import React from 'react';
import PropTypes from 'prop-types';

export const Header = (props={}) => (
   <div>{props}</div>
);
Header.propTypes = {
  props: PropTypes.object
};

props={}如果未向组件提供道具,则此代码假定为默认值。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.