Performance-minded React linting rules for ESLint (motivated by esamatti's post "React.js pure render performance anti-pattern").
$ npm i eslint-plugin-react-perfAdd plugins section and specify eslint-plugin-react-perf as a plugin.
{
"plugins": ["react-perf"]
}- react-perf/jsx-no-new-object-as-prop: Prevent
{...}as JSX prop value - react-perf/jsx-no-new-array-as-prop: Prevent
[...]as JSX prop value - react-perf/jsx-no-new-function-as-prop: Prevent
functionas JSX prop value - react-perf/jsx-no-jsx-as-prop: Prevent JSX as JSX prop value
Each eslint-plugin-react-perf rule supports options for ignoring certain elements:
nativeAllowList: Control whether native elements (lowercase first letter React components) are ignored. Accepts"all"or an array of attribute names (case-insensitive) to ignore on native elements.allowComponents: Provide an array of component names to ignore entirely. Use the fully qualified component name for member expressions (for example,"Layout.Item").
With this configuration, all native elements are ignored for this rule:
{
"react-perf/jsx-no-new-object-as-prop": [
"error",
{
"nativeAllowList": "all"
}
]
}With this configuration, the "style" attribute is ignored for native elements for this rule:
{
"react-perf/jsx-no-new-object-as-prop": [
"error",
{
"nativeAllowList": ["style"]
}
]
}With this configuration, CustomButton and Layout.Item components are ignored for this rule:
{
"react-perf/jsx-no-new-object-as-prop": [
"error",
{
"allowComponents": ["CustomButton", "Layout.Item"]
}
]
}This plugin exports a recommended configuration that enforce React good practices.
To enable this configuration add the following to your eslint.config.js:
import reactPerfPlugin from 'eslint-plugin-react-perf';
const config = [
reactPerfPlugin.configs.flat.recommended
];
export default config;To enable this configuration use the extends property in your .eslintrc config file:
{
"extends": ["plugin:react-perf/recommended"]
}See ESLint documentation for more information about extending configuration files.
The rules enabled in this configuration are:
- react-perf/jsx-no-new-object-as-prop
- react-perf/jsx-no-new-array-as-prop
- react-perf/jsx-no-new-function-as-prop
- react-perf/jsx-no-jsx-as-prop
This plugin also exports an all configuration that includes every available rule.
To enable this configuration add the following to your eslint.config.js:
import reactPerfPlugin from 'eslint-plugin-react-perf';
const config = [
reactPerfPlugin.configs.flat.all
];
export default config;{
"plugins": [
"react-perf"
],
"extends": ["plugin:react-perf/all"]
}Try out cvazac/test-ref-pattern.
eslint-plugin-react-perf is licensed under the MIT License.