首页 > 解决方案 > 我可以在不使用 useState 的情况下访问 useEffect 中的变量吗?

问题描述

我想在不使用 useState 的情况下访问 useEffect 挂钩内的变量。我怎样才能做到这一点?

这是我的代码:

let numberOfLessons;

useEffect(() => {
        getLessons()
            .then(response => 
                numberOfLessons = response.data().length // 6
            })
            .catch(error => {
                console.log(error)
            })
    }, [])


console.log(numberOfLessons) // undefined

标签: javascriptreactjsreact-nativeuse-effectuse-state

解决方案


没有什么可以从物理上阻止您这样做。但缺点是你的变量不是 React 状态的一部分。

它的值最初设置为undefined. 稍后当您将其设置为6不会触发 React 重新渲染视图时,您的 6 可能永远不会出现在屏幕上。

但也许这对你来说并不重要。如果这个变量仅用于记录,那么 React 是否知道它并不重要。


在您的确切示例console.log中未定义,因为您在设置值之前正在记录。这并不是真正的 React 特定问题。这就是异步代码的工作方式。如果你做了

setTimeout(() => console.log(numberOfLessons), 5000)

那么你会得到6预期的结果。


推荐阅读