在 React useEffect 钩子中设置钩子状态

卡塔吉恩

我正在尝试为我的一门课程中的 React 作业创建自定义数据获取挂钩。是一个简单的钩子,它访问几个 REST API 端点并创建一个清单对象,应用程序将其用于组成沙拉的组件。问题是我似乎无法从useEffect获取数据的钩子内设置钩子的内部状态我以前多次使用过这种方法,我真的不知道是什么导致了这种行为。无论我setContent哪里尝试在我的useEffect函数中使用它,它始终保持null.

请帮忙!

const useInventory = (baseURL) => {
    const [loading, setLoading] = useState(false);
    const [content, setContent] = useState(null);
    const [error, setError] = useState(null);

    useEffect(() => {
        setLoading(true);

        const types = ['foundations', 'extras', 'proteins', 'dressings'];
        const urls = types.map(endp => `${baseURL}/${endp}`);

        Promise
            .all(urls.map(u => fetch(u)))
            .then(responses => Promise.all(responses.map(res => res.json())))
            .then(data => {

                const inventory = data.reduce((acc, curr, i) => 
                    ({ ...acc, [types[i]]: curr }),
                {});

                // This logs the inventory in desired format
                // e.g { foundations: Array, extras: Array, ... }
                console.log(inventory);
                setContent(inventory);
            })
            .catch(err => {
                setError(err);
            })
            .finally(() => {
                setLoading(false);

                // This logs null, for some reason
                console.log(content);
            });

    }, [baseURL]);

    return [content, loading, error];
}
阿米特·乔汉

设置状态不是同步的,您不会在 finally 块中获得更新的内容。

如果您想调试内容更改的值,您可以使用 useEffect 和控制台,如下所示。

useEffect(() => {
  console.log(content); 
}, [content])

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在React useEffect钩子中引用过时的状态

在useEffect中访问旧状态与新状态进行比较使用自定义钩子useEffect react钩子

了解React中的钩子设置状态

无法使用钩子在 React 中设置状态

使用回调和钩子(useState,useEffect)从父项中的 onClick 事件更改 React 子组件的状态

状态值在 UseEffect 钩子内停止更新 - Gatsby/React

React 如何使用 useEffect 和 useCallback 重新渲染状态钩子?

React钩子-在useEffect内设置超时,但是能够从鼠标事件中清除超时?

如何避免 React 钩子中 useEffect 中的 setState?

组件未使用'useEffect'钩子在React中重新渲染

React - nextjs 在 useEffect 中调用自定义钩子

如何使用React钩子清理useEffect中的setInterval

如何在不使用实际的 useEffect 钩子的情况下创建像 React 的 useEffect 钩子中那样的陈旧闭包?

使用 React 钩子更正 useEffect 的依赖数组

在添加eventListener的同时测试React useEffect钩子

React钩子:什么/为什么使用useEffect?

React useEffect 钩子不清除间隔

具有React useEffect钩子的componentWillUnmount

哪个React钩子首先执行useEffect或useLayoutEffect?

如何测试useState和useEffect React钩子

将 React 常量传递给 useEffect 钩子

React-useEffect钩子-要使用useEffect的componentDidMount

我可以在反应中使用 useEffect 钩子在孩子的父母中设置状态吗

使用 useEffect 钩子时无法对未安装的组件执行 React 状态更新

使用 React 钩子从另一个页面使用 useEffect 更新状态

在React的useEffect依赖数组中设置状态

如何映射已在 useEffect 钩子中设置的 prop 数组

了解React的钩子useEffect函数。何时调用useffect中的回调函数(即取消订阅)?

无法在React中使用useEffect钩子将json服务器数据连接到数组中