自定义react-hooks的属性类型

IT技术 reactjs
2021-05-09 11:41:01

随着 React 钩子的出现,我们是否应该为 React 自定义钩子使用 prop-types 例如,

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

const useTitle = title => {
  React.useEffect(() => {
    document.title = title;
  }, [title]);
}

useTitle.propTypes = {
  title: PropTypes.string.isRequired,
};

export default useTitle;

以上是验证传递给自定义react-hooks的参数的好方法,还是应该有不同的方法来验证传递给自定义钩子的props/参数,这基本上只是一个简单的函数。

4个回答

不。React 不验证自定义钩子或内置钩子props。

在这里查找 updateFunctionComponent,它验证checkPropTypes用于react组件的prop 类型,然后使用钩子呈现它,即 check out renderWithHooks

现在,如果您在 renderWithHooks 方法中检查此处,它会更新调度程序并调用您的功能组件,该组件又会调用您的自定义钩子,因为它只是您的功能组件内部的另一个函数调用。

您的自定义钩子将调用内置钩子。您可以在此处查看实施情况根据调度程序的类型,它将调用内置钩子。如果您checkPropTypes在整个文件中搜索,您将找不到prop-types/checkPropTypes用于验证 prop 类型的验证逻辑或依赖项。

是一些关于react-hooks如何工作的好文章

我正在使用 PropTypes.checkPropTypes 作为 useSelector 钩子。它对我有用。

const useTitle = title => {
  React.useEffect(() => {
    document.title = withPropsValidation(title);
  }, [title]);
}

const withPropsValidation = props => {
  PropTypes.checkPropTypes(propTypes, props, 'prop', '')
  return props
}

const propTypes = {
  title: PropTypes.string.isRequired,
}

https://github.com/facebook/prop-types#proptypescheckproptypes

在我看来,使用某种类型机制会比 TypeScript 更好,但如果你不这样做,你仍然应该使用 propTypes,另外你可以从 kentcdodds 中查看这门课程以确保 propTypes 的使用https://egghead.io/课程/simplify-react-apps-with-react-hooks

typescript是验证和检查props的最佳方式

import React from 'react';   

const useTitle = ({title}:{title?:string})=> {
  React.useEffect(() => {
    document.title = title;
  }, [title]);
}

export default useTitle;

或者

import React from 'react';   

type customPropType= {
    title?:string
}

const useTitle = ({title}:customPropType)=> {
  React.useEffect(() => {
    document.title = title;
  }, [title]);
}

export default useTitle;