Description
Do you want to request a feature or report a bug?
Bug
What is the current behavior?
Consider:
function Example({ fetchData, someArg }) {
let data = 'defaultValue';
useEffect(() => {
data = fetchData(someArg);
}, [someArg]);
return JSON.stringify(data);
}
auto fix will automatically change this to:
function Example({ fetchData, someArg }) {
let data = 'defaultValue';
useEffect(() => {
data = fetchData(someArg);
}, [someArg, fetchData]);
return JSON.stringify(data);
}
Here we have a simple data fetch component that should refetch data when parameters change, but not when the fetch function changes. Whether this is right or not, it is legitimate code, that the lint fix will cause serious problems in the code if it is used like this:
function ExmapleUsage({ fetchData }) {
return <Example fetchData={( arg ) => fetchData('Hello World', arg)} someArg="Goodbye" />
}
What is the expected behavior?
Eslint best practices say that fix rules should not change functionality of code, so that you can safely run fix and expect no functional changes to be made. This rule directly breaks that. I as a repo maintainer see the auto fix as a greater risk than the problems the lint rule prevents. If autofix was turned off, the rule would be entirely a positive.
Unfortunately, ESLint also has rejected the idea of disabling autofix for certain rules. So not following best practices is not ideal.
Which versions of React, and which browser / OS are affected by this issue? Did this work in previous versions of React?
Not a React Bug but a lint rule.