Skip to content

[Bug]: The forbidDefaultForRequired option in the react/require-default-props rule does not work as expected #3720

Closed
@vicasas

Description

@vicasas

Is there an existing issue for this?

  • I have searched the existing issues and my issue is unique
  • My issue appears in the command-line and not only in the text editor

Description Overview

The forbidDefaultForRequired option in the react/require-default-props rule does not work as expected

Using the react/require-default-props rule together with the forbidDefaultForRequired option set to true does not throw an error or warning when a prop that is required is assigned a default value.

Eslint rule

{
  "rules": {
    "react/require-default-props": ["error", {
      "forbidDefaultForRequired": true,
      "functions": "defaultArguments"
    }],
  }
}

Example code:

function MyStatelessComponent({ foo = 'foo', bar }) {
  return <div>{foo}{bar}</div>;
}

MyStatelessComponent.propTypes = {
  foo: PropTypes.string.isRequired,
  bar: PropTypes.string
};
type MyStatelessComponentProps = {
  foo: string;
  bar?: string
}

function MyStatelessComponent({ foo = 'foo', bar }: MyStatelessComponentProps) {
  return <div>{foo}{bar}</div>;
}

MyStatelessComponent.propTypes = {
  foo: PropTypes.string.isRequired,
  bar: PropTypes.string
};

In the previous examples the foo prop is required, but it is being assigned a default value, with the forbidDefaultForRequired option set totrue, without throwing errors or warnings.

Expected Behavior

The expected behavior is that if a prop is mandatory and a default value is assigned, it should throw an error or warning depending on the rule configuration.

eslint-plugin-react version

7.32.2

eslint version

8

node version

18

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions