我一直在使用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)
数组也是如此,但作为一个原语,它不会像预期的那样卡在循环中.
使用这些新的钩子,在检查天气内容是否发生变化时,我应该如何处理对象和数组?
我正在使用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)作品?