Rules
Overview
TIP
Linter rules can have false positives, false negatives, and some rules are dependent on the react
or react-dom
version you are using.
- 🌟 - Feature
- ⚙️ - Configurable
- 🧪 - Experimental
- 🐞 - Debug
- 💭 - Type Chcking
- 🔧 - Fixable
- 🔄 - Codemod
- 0️⃣ - Severity 0
- 1️⃣ - Severity 1
- 2️⃣ - Severity 2
- ✅ - Severity in recommended presets
X Rules
Rule | ✅ | 🌟 | Description | react |
---|---|---|---|---|
jsx-no-duplicate-props | 1️⃣ | Disallow duplicate props in JSX elements | ||
jsx-no-undef | 0️⃣ | Disallow undefined variables in JSX elements | ||
jsx-uses-react | 1️⃣ | Marks React variables as used when JSX is used | ||
jsx-uses-vars | 1️⃣ | Marks variables used in JSX elements as used | ||
no-access-state-in-setstate | 2️⃣ | Disallow accessing this.state inside setState calls | ||
no-array-index-key | 1️⃣ | Disallow an item's index in the array as its key | ||
no-children-count | 1️⃣ | Disallow Children.count | ||
no-children-for-each | 1️⃣ | Disallow Children.forEach | ||
no-children-map | 1️⃣ | Disallow Children.map | ||
no-children-only | 1️⃣ | Disallow Children.only | ||
no-children-prop | 0️⃣ | Disallow passing children as a prop | ||
no-children-to-array | 1️⃣ | Disallow Children.toArray | ||
no-class-component | 0️⃣ | Disallow class components except for error boundaries | ||
no-clone-element | 1️⃣ | Disallow cloneElement | ||
no-comment-textnodes | 1️⃣ | Prevents comments from being inserted as text nodes | ||
no-complex-conditional-rendering | 0️⃣ | 🧪 | Disallow complex conditional rendering in JSX expressions | |
no-component-will-mount | 2️⃣ | 🔄 | Replaces usages of componentWillMount with UNSAFE_componentWillMount | >=16.3.0 |
no-component-will-receive-props | 2️⃣ | 🔄 | Replaces usages of componentWillReceiveProps with UNSAFE_componentWillReceiveProps | >=16.3.0 |
no-component-will-update | 2️⃣ | 🔄 | Replaces usages of componentWillUpdate with UNSAFE_componentWillUpdate | >=16.3.0 |
no-context-provider | 1️⃣ | 🔄 | Replaces usages of <Context.Provider> with <Context> | >=19.0.0 |
no-create-ref | 2️⃣ | Disallow createRef in function components | ||
no-default-props | 2️⃣ | Disallow defaultProps property in favor of ES6 default parameters | ||
no-direct-mutation-state | 2️⃣ | Disallow direct mutation of this.state | ||
no-duplicate-key | 2️⃣ | Disallow duplicate key on elements in the same array or a list of children | ||
no-forward-ref | 1️⃣ | 🔄 | Replaces usages of forwardRef with passing ref as a prop | >=19.0.0 |
no-implicit-key | 1️⃣ | 🧪 | Prevents key from not being explicitly specified (e.g. spreading key from objects) | |
no-leaked-conditional-rendering | 1️⃣ | 💭 | Prevents problematic leaked values from being rendered | |
no-missing-component-display-name | 0️⃣ | Enforces that all components have a displayName which can be used in devtools | ||
no-missing-context-display-name | 0️⃣ | Enforces that all contexts have a displayName which can be used in devtools | ||
no-missing-key | 2️⃣ | Disallow missing key on items in list rendering | ||
no-misused-capture-owner-stack | 0️⃣ | 🧪 | Prevents incorrect usage of captureOwnerStack | |
no-nested-component-definitions | 2️⃣ | Disallow nesting component definitions inside other components | ||
no-nested-lazy-component-declarations | 2️⃣ | Disallow nesting lazy component declarations inside other components | ||
no-prop-types | 2️⃣ | Disallow propTypes in favor of TypeScript or another type-checking solution | ||
no-redundant-should-component-update | 2️⃣ | Disallow shouldComponentUpdate when extending React.PureComponent | ||
no-set-state-in-component-did-mount | 1️⃣ | Disallow calling this.setState in componentDidMount outside of functions, such as callbacks | ||
no-set-state-in-component-did-update | 1️⃣ | Disallow calling this.setState in componentDidUpdate outside of functions, such as callbacks | ||
no-set-state-in-component-will-update | 1️⃣ | Disallow calling this.setState in componentWillUpdate outside of functions, such as callbacks | ||
no-string-refs | 2️⃣ | 🔄 | Replaces string refs with callback refs | >=16.3.0 |
no-unsafe-component-will-mount | 1️⃣ | Warns the usage of UNSAFE_componentWillMount in class components | ||
no-unsafe-component-will-receive-props | 1️⃣ | Warns the usage of UNSAFE_componentWillReceiveProps in class components | ||
no-unsafe-component-will-update | 1️⃣ | Warns the usage of UNSAFE_componentWillUpdate in class components | ||
no-unstable-context-value | 1️⃣ | Prevents non-stable values (i.e. object literals) from being used as a value for Context.Provider | ||
no-unstable-default-props | 1️⃣ | Prevents using referential-type values as default props in object destructuring | ||
no-unused-class-component-members | 1️⃣ | Warns unused class component methods and properties | ||
no-unused-state | 1️⃣ | Warns unused class component state | ||
no-use-context | 1️⃣ | 🔄 | Replaces usages of useContext with use | >=19.0.0 |
no-useless-forward-ref | 1️⃣ | Disallow useless forwardRef calls on components that don't use ref s | ||
no-useless-fragment | 0️⃣ | 🔧 ⚙️ | Disallow useless fragment elements | |
prefer-destructuring-assignment | 0️⃣ | Enforces destructuring assignment for component props and context | ||
prefer-react-namespace-import | 0️⃣ | 🔧 | Enforces React is imported via a namespace import | |
prefer-read-only-props | 0️⃣ | 💭 🧪 | Enforces read-only props in components | |
prefer-shorthand-boolean | 0️⃣ | 🔧 | Enforces shorthand syntax for boolean attributes | |
prefer-shorthand-fragment | 0️⃣ | 🔧 | Enforces shorthand syntax for fragments | |
avoid-shorthand-boolean | 0️⃣ | 🔧 | Enforces explicit boolean values for boolean attributes | |
avoid-shorthand-fragment | 0️⃣ | Enforces explicit <Fragment> components instead of the shorthand <> or </> syntax |
DOM Rules
Rule | ✅ | 🌟 | Description | react-dom |
---|---|---|---|---|
no-dangerously-set-innerhtml | 1️⃣ | Disallow dangerouslySetInnerHTML | ||
no-dangerously-set-innerhtml-with-children | 2️⃣ | Disallow dangerouslySetInnerHTML and children at the same time | ||
no-find-dom-node | 2️⃣ | Disallow findDOMNode | ||
no-flush-sync | 2️⃣ | Disallow flushSync | ||
no-hydrate | 2️⃣ | 🔄 | Replaces usages of ReactDom.hydrate() with hydrateRoot() | >=18.0.0 |
no-missing-button-type | 1️⃣ | Enforces explicit type attribute for button elements | ||
no-missing-iframe-sandbox | 1️⃣ | Enforces explicit sandbox attribute for iframe elements | ||
no-namespace | 2️⃣ | Enforces the absence of a namespace in React elements | ||
no-render | 2️⃣ | 🔄 | Replaces usages of ReactDom.render() with createRoot(node).render() | >=18.0.0 |
no-render-return-value | 2️⃣ | Disallow the return value of ReactDOM.render | ||
no-script-url | 1️⃣ | Disallow javascript: URLs as attribute values | ||
no-unknown-property | 0️⃣ | 🔧 ⚙️ | Disallow unknown DOM property | |
no-unsafe-iframe-sandbox | 1️⃣ | Enforces sandbox attribute for iframe elements is not set to unsafe combinations | ||
no-unsafe-target-blank | 1️⃣ | Disallow target="_blank" without rel="noreferrer noopener" | ||
no-use-form-state | 2️⃣ | 🔄 | Replaces usages of useFormState with useActionState | >=19.0.0 |
no-void-elements-with-children | 2️⃣ | Disallow children in void DOM elements |
Web API Rules
Rule | ✅ | Description |
---|---|---|
no-leaked-event-listener | 1️⃣ | Prevents leaked addEventListener in a component or custom Hook |
no-leaked-interval | 1️⃣ | Prevents leaked setInterval in a component or custom Hook |
no-leaked-resize-observer | 1️⃣ | Prevents leaked ResizeObserver in a component or custom Hook |
no-leaked-timeout | 1️⃣ | Prevents leaked setTimeout in a component or custom Hook |
Hooks Extra Rules
Rule | ✅ | 🌟 | Description |
---|---|---|---|
no-direct-set-state-in-use-effect | 1️⃣ | 🧪 | Disallow direct calls to the set function of useState in useEffect |
no-direct-set-state-in-use-layout-effect | 0️⃣ | 🧪 | Disallow direct calls to the set function of useState in useLayoutEffect |
no-unnecessary-use-callback | 0️⃣ | 🧪 | Disallow unnecessary usage of useCallback |
no-unnecessary-use-memo | 0️⃣ | 🧪 | Disallow unnecessary usage of useMemo |
no-unnecessary-use-prefix | 1️⃣ | Enforces that a function with the use prefix should use at least one Hook inside of it | |
prefer-use-state-lazy-initialization | 1️⃣ | Enforces function calls made inside useState to be wrapped in an initializer function |
Naming Convention Rules
Rule | ✅ | 🌟 | Description |
---|---|---|---|
component-name | 0️⃣ | ⚙️ | Enforces naming conventions for components |
context-name | 1️⃣ | Enforces context name to be a valid component name with the suffix Context | |
filename | 0️⃣ | ⚙️ | Enforces consistent file naming conventions |
filename-extension | 0️⃣ | ⚙️ | Enforces consistent use of the JSX file extension |
use-state | 0️⃣ | Enforces destructuring and symmetric naming of useState hook value and setter |
Debug Rules
Rule | ✅ | 🌟 | Description |
---|---|---|---|
class-component | 0️⃣ | 🐞 | Reports all class components |
function-component | 0️⃣ | 🐞 | Reports all function components |
hook | 0️⃣ | 🐞 | Reports all react hooks |
is-from-react | 0️⃣ | 🐞 | Reports all identifiers that are initialized from React |
jsx | 0️⃣ | 🐞 | Reports all JSX elements and fragments |