我应该将默认反应属性设置为null

时间:2018-06-08 07:52:57

标签: reactjs

我是新手做出反应,我想尽可能地缩短编码时间。我们正在编写带有许多道具的反应组件。问题是我的同事一直在填写代码,这对我来说似乎是非常不必要的。那么将null设置为所有可用值还是仅使用propTypes来定义属性类型是否正确?因为我没有看到这样的用法示例,我认为这是不好的做法。

FormAutonumeric.defaultProps = {
    validationRules: null,
    onBlur: null,
    onFocus: null,
    inputClasses: null,
    showErrors: false,
    numericType: null,
    isFormValid: null,
    placeholder: null,
    onChange: null,
    disabled: null,
    children: null,
    vMin: null,
    vMax: null,
    prefix: null,
    suffix: null
};


FormAutonumeric.propTypes = {
    validationRules: PropTypes.shape({
        [PropTypes.string]: PropTypes.oneOfType([
            PropTypes.string,
            PropTypes.number,
            PropTypes.bool
        ])
    }),
    onBlur: PropTypes.func,
    onFocus: PropTypes.func,
    inputClasses: PropTypes.string,
    showErrors: PropTypes.bool,
    numericType: PropTypes.string,
    value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,
    isFormValid: PropTypes.func,
    id: PropTypes.string.isRequired,
    placeholder: PropTypes.string,
    onKeyUp: PropTypes.func.isRequired,
    onChange: PropTypes.func,
    disabled: PropTypes.bool,
    children: PropTypes.element,
    vMin: PropTypes.string,
    vMax: PropTypes.string,
    prefix: PropTypes.string,
    suffix: PropTypes.string
};

1 个答案:

答案 0 :(得分:4)

我同意Raul Rene的评论。任何未使用的道具都是undefined,除非您进行严格检查,否则可能会对您的代码产生任何影响,例如myProp !== null或其他。

如果您想继续使用defaultProps但仍然缩短代码,您可以随时将isRequired属性添加到组件工作所必需的那些道具中。例如,如果未传入onBluronFocus道具,您的组件可能无法按预期工作,而如果children或{{1},它可能会正常工作未明确传入。

以下是这种变化的样子:

disabled

并从onBlur: PropTypes.func.isRequired, onFocus: PropTypes.func.isRequired, 定义中删除这些道具。 A"后备"如果道具是必需的,那么道具是没有意义的"明确地传递给组件。

我不知道您的代码如何查找您的组件,但是道具名称表明您的defaultProps定义可以通过此更改减少至少一半。