Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.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/6/apache/8.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
Reactjs 反应useEffect,依赖项列表不工作_Reactjs_React Hooks_Use Effect_React Effects - Fatal编程技术网

Reactjs 反应useEffect,依赖项列表不工作

Reactjs 反应useEffect,依赖项列表不工作,reactjs,react-hooks,use-effect,react-effects,Reactjs,React Hooks,Use Effect,React Effects,我相信我对这件事的理解是错误的。我有以下组件 const Comp = () => { const filter = 'a'; useEffect(() => { console.log('executing effect'); loadFriends(); }, [filter]); return ( <Div> {friendsFilter} </Div>

我相信我对这件事的理解是错误的。我有以下组件

const Comp = () => {
    const filter = 'a';

    useEffect(() => {
      console.log('executing effect');
      loadFriends();
    }, [filter]);


    return (
      <Div>
        {friendsFilter}
      </Div>
    );
  };
const Comp=()=>{
常量过滤器='a';
useffect(()=>{
console.log(“执行效果”);
loadFriends();
},[filter]);
返回(
{friendsFilter}
);
};

现在根据我的理解,既然
useffect
上的依赖项列表是
filter
react,那么当组件再次渲染时,它不应该运行效果?然而,它似乎在运行它。我理解这里有什么错误吗?

如果您只希望它运行一次,请使用空数组作为依赖项值,而不是“[filter]”。

我已经测试了您的用例,但它没有调用useEffect块

这是我已经测试过的代码

import React, { useEffect, useState } from "react";

const Comp = () => {
  const [count, setCount] = useState(0);
  const filter = "a";

  useEffect(() => {
    console.log("executing effect");
    //loadFriends();
  }, [filter]);

  return (
    <div>
      Div
      <button onClick={() => setCount(count + 1)}> Click me</button>
      Count: {count}
    </div>
  );
};

export default Comp;

import React,{useffect,useState}来自“React”;
常数Comp=()=>{
const[count,setCount]=useState(0);
const filter=“a”;
useffect(()=>{
console.log(“执行效果”);
//loadFriends();
},[filter]);
返回(
Div
设置计数(计数+1)}>单击我
计数:{Count}
);
};
导出默认Comp;
即使更改计数,组件也会重新渲染,但不会调用useEffect块

很可能在
loadFriends()
中发生了一些事情,它正在更改筛选器的值


使用componentDidMount()重新渲染我不想使用componentDidMount或重新渲染。我想问,为什么它在
过滤器
值未更改的情况下仍会运行此效果?这里肯定还有其他原因,我确信这是精简的代码,您能提供一个更详细的示例吗?您的loadFriends()在做什么?你能发布完整的代码吗?分享loadFriends()块的代码。可能是它改变了过滤器的值。谢谢你,即使
loadFriends
改变了什么,因为
filter
是硬编码的,useffect不应该只运行一次吗?如果你能在
loadFriends
中共享代码,我可以给你一个更好的答案。因为上面的代码在没有
loadFriends
的情况下工作得非常好。