相关疑难解决方法(0)

useEffect中的无限循环

我一直在使用React 16.7-alpha中的新钩子系统,当我正在处理的状态是一个对象或数组时,它会在useEffect中陷入无限循环.

首先,我使用useState并使用如下的空对象启动它:

const [obj, setObj] = useState({});
Run Code Online (Sandbox Code Playgroud)

然后,在useEffect中,我使用setObj将其再次设置为空对象.作为第二个参数,我传递[obj],希望如果对象的内容没有改变,它不会更新.但它不断更新.我想因为无论内容如何,​​这些都是不同的对象,让React认为它在不断变化?

useEffect(() => {
  setIngredients({});
}, [ingredients]);
Run Code Online (Sandbox Code Playgroud)

数组也是如此,但作为一个原语,它不会像预期的那样卡在循环中.

使用这些新的钩子,在检查天气内容是否发生变化时,我应该如何处理对象和数组?

reactjs react-hooks

45
推荐指数
9
解决办法
2万
查看次数

反应useEffect比较对象

我正在使用react useEffect挂钩并检查对象是否已更改,然后才再次运行挂钩。

我的代码如下所示。

const useExample = (apiOptions) => {
    const [data, updateData] = useState([]);
    useEffect(() => {
       const [data, updateData] = useState<any>([]);
        doSomethingCool(apiOptions).then(res => {               
           updateData(response.data);
       })
    }, [apiOptions]);

    return {
        data
    };
};
Run Code Online (Sandbox Code Playgroud)

不幸的是,由于对象未被识别为相同对象,因此它一直在运行。

我相信以下是一个示例。

const useExample = (apiOptions) => {
    const [data, updateData] = useState([]);
    useEffect(() => {
       const [data, updateData] = useState<any>([]);
        doSomethingCool(apiOptions).then(res => {               
           updateData(response.data);
       })
    }, [apiOptions]);

    return {
        data
    };
};
Run Code Online (Sandbox Code Playgroud)

也许运行的JSON.stringify(apiOptions)作品?

javascript reactjs react-hooks

19
推荐指数
4
解决办法
9789
查看次数

标签 统计

react-hooks ×2

reactjs ×2

javascript ×1