我可以在不使用 useState 的情况下访问 useEffect 中的变量吗?
Can I access a variable inside useEffect without use useState?
我想在不使用 useState 的情况下访问 useEffect 挂钩中的变量。我该怎么做?
这是我的代码:
let numberOfLessons;
useEffect(() => {
getLessons()
.then(response =>
numberOfLessons = response.data().length // 6
})
.catch(error => {
console.log(error)
})
}, [])
console.log(numberOfLessons) // undefined
没有什么可以阻止你这样做。但缺点是你的变量不是 React 状态的一部分。
它的值初始设置为undefined
。稍后当您将其设置为 6
时,不会触发 React 重新渲染视图,因此您的 6 可能永远不会出现在屏幕上。
但也许这对您来说并不重要。如果仅使用此变量,例如对于日志记录,那么 React 是否知道它并不重要。
在您的确切示例中,console.log
是未定义的,因为您在 之前 设置了值。这并不是真正的 React 特定问题。这就是异步代码的工作原理。如果你这样做了
setTimeout(() => console.log(numberOfLessons), 5000)
那么您将得到预期的 6
。
我想在不使用 useState 的情况下访问 useEffect 挂钩中的变量。我该怎么做?
这是我的代码:
let numberOfLessons;
useEffect(() => {
getLessons()
.then(response =>
numberOfLessons = response.data().length // 6
})
.catch(error => {
console.log(error)
})
}, [])
console.log(numberOfLessons) // undefined
没有什么可以阻止你这样做。但缺点是你的变量不是 React 状态的一部分。
它的值初始设置为undefined
。稍后当您将其设置为 6
时,不会触发 React 重新渲染视图,因此您的 6 可能永远不会出现在屏幕上。
但也许这对您来说并不重要。如果仅使用此变量,例如对于日志记录,那么 React 是否知道它并不重要。
在您的确切示例中,console.log
是未定义的,因为您在 之前 设置了值。这并不是真正的 React 特定问题。这就是异步代码的工作原理。如果你这样做了
setTimeout(() => console.log(numberOfLessons), 5000)
那么您将得到预期的 6
。