【发布时间】:2021-06-17 00:51:24
【问题描述】:
我一直认为在useEffect 调用中包含任何形式的setState 都会导致无限的重新渲染循环,因为每次渲染都会调用useEffect。但由于某种原因,我的代码很好,而且我的 Next.js 应用程序运行良好。我能知道我的知识差距在哪里吗?
const [base, setBase] = useState(DEFAULT_BASE)
const [rateData, setRateData] = useState([])
const [symbolList, setSymbolList] = useState([])
// At the start, we want to display the rates in terms of EUR
useEffect(async () => {
const data = await calculator(FETCH_DATA, base)
setRateData(data)
// Create the symbol list
const symbols = []
Object.keys(data).map((c) =>
symbols.push(c)
)
setSymbolList(symbols)
console.log(symbolList)
}, [])
【问题讨论】:
-
您的
useEffect有空依赖项,那么您为什么希望它重新运行? (免责声明:我并不是说,你所做的设计是好是坏) -
如果你省略第二个参数(非空数组),它只会在每次渲染时运行。
-
一些不相关的东西,但不要对
useEffect函数使用异步。 useEffect 不希望返回任何内容或返回通常称为清理函数的函数。通过写async它返回一个 Promise。参考这个stackoverflow.com/questions/53332321/…
标签: javascript reactjs next.js use-effect