【发布时间】:2023-01-20 01:26:44
【问题描述】:
我的帖子与其说是问题,不如说是问题。 在 React 中,为了从 API 中获取数据,我们使用钩子 useEffect。但为什么不与各州合作来管理重新渲染呢? (见下面的例子)
import React from "react"
export default function App() {
const [starWarsData, setStarWarsData] = React.useState({})
const [isLoaded, setIsLoaded] = React.useState(false)
if (!isLoaded) {
const randomIndex = Math.floor(Math.random()*50)
fetch(`https://swapi.dev/api/people/${randomIndex}`)
.then(res => res.json())
.then(data => setStarWarsData(data))
setIsLoaded(true)
}
return (
<div>
<pre>{JSON.stringify(starWarsData, null, 2)}</pre>
<button onClick={() => setIsLoaded(false)}>Load random charachter</button>
</div>
)
}
如您所见,我使用一个简单的 if 语句来管理重新渲染。你能告诉我为什么在获取数据时我应该使用 useEffect 而不是上面介绍的方式吗?
提前致谢
【问题讨论】:
-
它就停在您描述的位置或更早的位置。如果您没有任何要清理的东西,则不需要该部分。 React 还在严格模式下双重渲染,所以你会得到两个实例,在这种情况下,
isLoaded为 false。最终你会问为什么你不应该使用 React,因为它是为使用而设计的,而且你的决定不太可能得到支持 -
@BrianThompson 不是我决定以其他方式使用反应而不是它的设计方式。这是一个天才的问题。我只是想深入了解 useEffect 的使用。但看起来我的问题在某种程度上令人反感。无论如何,感谢您的评论。
标签: reactjs react-hooks fetch rerender