Reactjs 您能否指定必须至少提供一套道具?

Reactjs 您能否指定必须至少提供一套道具?,reactjs,react-proptypes,Reactjs,React Proptypes,在React propTypes中,是否可以指定必须提供一个道具或另一个道具 例如,如果未提供myPropA,则必须提供myPropB 似乎没有办法解决这个问题。是的,有办法。您可以添加自己的自定义验证函数 const propTypes = { customProp: function(props, propName, componentName) { if ( !("myPropA" in props) && !("myPropB" in props) )

在React propTypes中,是否可以指定必须提供一个道具或另一个道具

例如,如果未提供
myPropA
,则必须提供
myPropB


似乎没有办法解决这个问题。

是的,有办法。您可以添加自己的自定义验证函数

const propTypes = {
    customProp: function(props, propName, componentName) {
      if ( !("myPropA" in props) && !("myPropB" in props) ) {
        return new Error(
        "Invalid prop"
      );
    }
  }
}

jsidle:

您可以为
myPropA
指定可选的道具类型,然后为
myPropB
提供自定义验证道具功能。您可以在需要的任何结构中提供任何自定义错误消息。您可以使用函数参数(如道具名称和组件名称)来生成此消息。此示例还仅使用属性名
myPropA
/
myPropB
,而不是引入额外的自定义属性键/名称

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

const Hello = ({ name, myPropA, myPropB }) => <h1>Hello {name}!</h1>;

Hello.propTypes = {
  myPropA: PropTypes.string,
  myPropB: function(props, propName, componentName) {
    // required validation
    if(!props.myPropA && !props.myPropB) {
      return new Error(`Failed prop type: The prop '${propName}' is required in '${componentName}' when prop 'myPropA' is 'undefined', but it's value is '${props[propName]}'.`);
    }

    // string validation
    if(!props.myPropA && props.myPropB && typeof props.myPropB !== 'string') {
      return new Error(`Failed prop type: Invalid prop ${propName} of type '${typeof props[propName]}' supplied to ${componentName}, expected 'string'.`);
    }
  },
};

export default Hello;
从“React”导入React;
从“道具类型”导入道具类型;
常量Hello=({name,myPropA,myPropB})=>Hello{name}!;
Hello.propTypes={
myPropA:PropTypes.string,
myPropB:函数(props、propName、componentName){
//所需验证
如果(!props.myPropA&!props.myPropB){
返回新错误(`Failed prop type:prop'${propName}'在'${componentName}'中是必需的,当prop'myPropA'为'undefined'时,但其值为'${props[propName]}'。`);
}
//字符串验证
如果(!props.myPropA&&props.myPropB&&typeof-props.myPropB!=='string'){
返回新错误(`Failed prop type:Invalid prop${propName},类型为'${typeof props[propName]}',提供给${componentName},应为'string';
}
},
};
导出默认Hello;
这是一个正在实施的计划

希望这有帮助

可能重复的