Description
Do you want to request a feature or report a bug?
BUG (possible) in eslint-plugin-react-hooks
What is the current behavior?
When I'm in CodeSanbox using a React Sandbox I can use single properties of the props
object as dependencies for the useEffect
hook:
Example 1:
useEffect(()=>{
console.log('Running useEffect...');
console.log(typeof(props.myProp));
},[ ]);
The example 1 gives me the following warning in CodeSandbox environment:
React Hook useEffect has a missing dependency: 'props.myProp'. Either include it or remove the dependency array. (react-hooks/exhaustive-deps) eslint
And if I add [props.myProp]
to the array, the warning goes away.
But the same example 1 in my local environment in VSCode, I get the following warning:
React Hook useEffect has a missing dependency: 'props'. Either include it or remove the dependency array. However, 'props' will change when any prop changes, so the preferred fix is to destructure the 'props' object outside of the useEffect call and refer to those specific props inside useEffect.eslint(react-hooks/exhaustive-deps)
What is the expected behavior?
I would expect that I would get the same behavior that I get on CodeSandbox in my local environment in VSCode.
But, if I add [props.myProp]
to the array, the warning DOES NOT go away. Although the code works as intended.
What could be happening? Does CodeSandbox uses a different version of the plugin? Is there any configuration I can make to change this behavior?
Which versions of React, and which browser / OS are affected by this issue? Did this work in previous versions of React?
Versions I'm using:
DEV:
"eslint": "^5.10.0",
"eslint-plugin-react": "^7.11.1",
"eslint-plugin-react-hooks": "^1.6.1",
REGULAR
"react": "^16.8.6",
"react-dom": "^16.8.6",
VSCODE (probably not causing this issue)
Version: 1.32.3 (user setup)
Commit: a3db5be9b5c6ba46bb7555ec5d60178ecc2eaae4
Date: 2019-03-14T23:43:35.476Z
Electron: 3.1.6
Chrome: 66.0.3359.181
Node.js: 10.2.0
V8: 6.6.346.32
OS: Windows_NT x64 10.0.17763
.eslintrc.json
{
"root" :true,
"env": {
"browser": true,
"commonjs": true,
"es6": true,
"node": true
},
"extends": [
"eslint:recommended",
"plugin:react/recommended",
"plugin:import/errors"
],
"parser":"babel-eslint",
"parserOptions": {
"ecmaVersion": 2018,
"sourceType": "module",
"ecmaFeatures": {
"jsx":true
}
},
"plugins":[
"react",
"react-hooks"
],
"rules": {
"react/prop-types": 0,
"semi": "error",
"no-console": 0,
"react-hooks/rules-of-hooks": "error",
"react-hooks/exhaustive-deps": "warn"
},
"settings": {
"import/resolver" : {
"alias" : {
"map" : [
["@components","./src/components"],
["@constants","./src/constants"],
["@helpers","./src/helpers"]
],
"extensions": [".js"]
}
},
"react" : {
"version": "detect"
}
}
}