mirror of
https://github.com/facebook/react.git
synced 2025-11-01 09:12:30 +00:00
fix(eslint-plugin-react-hooks): accepting as expressions as deps array (#28189)
## Summary This PR closes #25844 The original issue talks about `as const`, but seems like it fails for any `as X` expressions since it adds another nesting level to the AST. EDIT: Also closes #20162 ## How did you test this change? Added unit tests
This commit is contained in:
@@ -7747,6 +7747,24 @@ const testsTypescript = {
|
||||
}
|
||||
`,
|
||||
},
|
||||
{
|
||||
code: normalizeIndent`
|
||||
function App(props) {
|
||||
React.useEffect(() => {
|
||||
console.log(props.test);
|
||||
}, [props.test] as const);
|
||||
}
|
||||
`,
|
||||
},
|
||||
{
|
||||
code: normalizeIndent`
|
||||
function App(props) {
|
||||
React.useEffect(() => {
|
||||
console.log(props.test);
|
||||
}, [props.test] as any);
|
||||
}
|
||||
`,
|
||||
},
|
||||
],
|
||||
invalid: [
|
||||
{
|
||||
|
||||
@@ -618,7 +618,12 @@ export default {
|
||||
|
||||
const declaredDependencies = [];
|
||||
const externalDependencies = new Set();
|
||||
if (declaredDependenciesNode.type !== 'ArrayExpression') {
|
||||
const isArrayExpression =
|
||||
declaredDependenciesNode.type === 'ArrayExpression';
|
||||
const isTSAsArrayExpression =
|
||||
declaredDependenciesNode.type === 'TSAsExpression' &&
|
||||
declaredDependenciesNode.expression.type === 'ArrayExpression';
|
||||
if (!isArrayExpression && !isTSAsArrayExpression) {
|
||||
// If the declared dependencies are not an array expression then we
|
||||
// can't verify that the user provided the correct dependencies. Tell
|
||||
// the user this in an error.
|
||||
@@ -631,7 +636,11 @@ export default {
|
||||
'dependencies.',
|
||||
});
|
||||
} else {
|
||||
declaredDependenciesNode.elements.forEach(declaredDependencyNode => {
|
||||
const arrayExpression = isTSAsArrayExpression
|
||||
? declaredDependenciesNode.expression
|
||||
: declaredDependenciesNode;
|
||||
|
||||
arrayExpression.elements.forEach(declaredDependencyNode => {
|
||||
// Skip elided elements.
|
||||
if (declaredDependencyNode === null) {
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user