Reactjs 我可以在react中的useEffect()中将数组用作依赖项吗?

Reactjs 我可以在react中的useEffect()中将数组用作依赖项吗?,reactjs,react-hooks,next.js,Reactjs,React Hooks,Next.js,在react中的useffect()钩子中将数组用作依赖项 const [productCategories, setproductCategories] = useState([]); useEffect(() => { // set something.. if(categories){ const filtered = categories.filter((c)=>c.available); setproductCategories(

在react中的useffect()钩子中将数组用作依赖项

const [productCategories, setproductCategories] = useState([]);


useEffect(() => {
    // set something..
    if(categories){
      const filtered = categories.filter((c)=>c.available);
      setproductCategories(filtered);
    }
  }, [categories]);
这里的类别已经是来自服务器的数组。 我想,如果此类别发生更改,请设置productCategories状态。 当我尝试这个方法时,它进入无限调用。

而不是 [类别] 使用[JSON.stringify(类别)] 当数组引用发生更改时,它将进入无限循环,最好尝试此操作。

您可以使用:

const [productCategories, setproductCategories] = useState([]);

useEffect(() => {
    // set something..
    if(categories){
      const filtered = categories.filter((c)=>c.available);
     // when productCategories update
     // your component gonne re-render
      setproductCategories(filtered);
    }
  }, [productCategories]);

您不应该使用productCategories而不是categories吗???问题我可以看到,即使categories是一个[]数组,if(categories)将有条件地变为true,并且在内部调用
setproductCategories
,这将再次更新cause-re-render->从而导致无限循环如果从服务器获取
categories
,我看不到使用
useffect
的意义。您只需执行以下操作:
const[productCategories,setproductCategories]=useState(()=>categories.filter((c)=>c.available))但productCategories也是数组,它将在一个无限循环中运行。不知怎的,它起了作用,但请详细说明。