Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Eslint React Hooks错误:对于useEffect中的函数依赖项,Eslint插件React Hooks发出详尽的deps警告_Javascript_Reactjs_Eslint_React Hooks - Fatal编程技术网

Javascript Eslint React Hooks错误:对于useEffect中的函数依赖项,Eslint插件React Hooks发出详尽的deps警告

Javascript Eslint React Hooks错误:对于useEffect中的函数依赖项,Eslint插件React Hooks发出详尽的deps警告,javascript,reactjs,eslint,react-hooks,Javascript,Reactjs,Eslint,React Hooks,从“React”导入React; 从“道具类型”导入道具类型; 从'react redux'导入{connect}; 从“../Actions”导入操作; export const UserComponent=({foo,baz,bar,user,fetchUser})=>{ useffect(()=>{ log(“##########我被呼叫我被呼叫”); fetchUser(); }, []); 返回( {user.name} {foo}{baz}{bar} ); }; UserCompon

从“React”导入React;
从“道具类型”导入道具类型;
从'react redux'导入{connect};
从“../Actions”导入操作;
export const UserComponent=({foo,baz,bar,user,fetchUser})=>{
useffect(()=>{
log(“##########我被呼叫我被呼叫”);
fetchUser();
}, []);
返回(
{user.name}

{foo}{baz}{bar}

); }; UserComponent.propTypes={ fetchUser:PropTypes.func.isRequired, 用户:PropTypes.shape({}), }; 常量mapActionsToProps={ fetchUser:Actions.fetchUser, }; 常量mapStateToProps=({data})=>({ 用户:data.user, });
导出默认连接(MapStateTops、mapActionsToProps)(UserComponent)如果应用程序生命周期中的
fetchUser
操作未更改,则禁用es lint警告

由于fetchUser是一个redux操作,并且它不会在应用程序生命周期中改变,因此我认为您可以安全地禁用适用于您的案例的规则

useEffect(() => {
    console.log('##### I WAS CALLED I WAS CALLED');
    fetchUser();
    //eslint-disable-next-line import/no-extraneous-dependencies
  }, []);

错误是,您需要将effect回调使用的所有资源(变量/函数)放在dependencies数组中

因此,您需要将fetchUsers放入dependencies数组中。 但是,它会导致无限循环。因为每次都会重新创建fetchUsers实例

您需要维护api响应的加载状态。 并且,在回调中进行检查,如下所示:

useEffect(() => {
    if(!user && !loading ) {
        fetchUser();
    }
}, [fetchUser, user]);

我在基于钩子的组件中使用redux的方式是错误的。本指南帮助我在使用钩子的功能组件中使用
redux

问题在于函数fetchUser在每次渲染中都会更改。 您可以使用“useCallback”解决此问题

例如:

const initFetchMethod = useCallback(() => {
   return dispatch(fetchUserAction())
}, [dispatch])


useEffect(() => {
   initFetchMethod();
}, [initFetchMethod]);
参考资料:


您是否尝试过使用
useffect(()=>{fetchUser()})完全省略依赖项数组?换句话说,不要将第二个参数传递给
useffect
。对不起,我更新了我的问题。我有多个道具被传递到组件&我不想每次这些道具改变时都运行useffect。我只想第一次获取用户,而不是每次API发生更改时都获取用户。使用
user
作为
useffect
的第二个参数怎么样,因为您只想在
user
发生更改时更新。如
useffect(()=>{fetchUser()},[user])嗯,总是有
//eslint禁用下一行反应钩子/穷举deps
如果其他人发现此问题,请将您的解决方案作为答案发布,并将其标记为解决方案,这将对他们有所帮助。