我在自定義React鉤子內部觸發setState時得到了這個錯誤。我不知道如何解決這個問題,誰能告訴我我做錯了什么。當它碰到handleSetReportState()行時,就會出現這個錯誤。我應該如何從鉤子內部設定報告狀態?
自定義使用interval poll鉤子
export function usePoll(callback: IntervalFunction, delay: number) {
const savedCallback = useRef<IntervalFunction | null> ()
useEffect(() => {
savedCallback.current = callback
}, [callback])
useEffect(() => {
function tick() {
if (savedCallback.current !== null) {
savedCallback.current()
}
}
const id = setInterval(tick, delay)
return () =>/span> clearInterval(id)
}, [delay])
}
回應FC
const BankLink: React.FC = ({ report: _report }) => {
const [report, setReport] = React.useState(_report)
if ([...Statues].includes(report.status) {
usePoll(async ( ) => {
const initialStatus = _report.status
const { result } = await apiost(`/links/search` }) 。
const currentReport = result.results. filter((item: { id: string; }) => item.id == _report.id)
if (currentReport[0].status !== initialStatus) {
handleSetReportState(currentReport[0] )
console.log('status changed')
} else {
console.log('status unchanged')
}
}, 5000)
}
... 其他
uj5u.com熱心網友回復:
這是因為你把usePoll放在if條件中,見https://reactjs.org/docs/hooks-rules.html#only-call-hooks-at-the-top-level
你可以把條件放在回呼中
usePoll(async ( ) => {
if ([...Statues].includes(report.status) {
const initialStatus = _report.status
const { result } = await apiost(`/links/search` }) 。
const currentReport = result.results. filter((item: { id: string; }) => item.id == _report.id)
if (currentReport[0].status !== initialStatus) {
handleSetReportState(currentReport[0] )
console.log('status changed')
} else {
console.log('status unchanged')
}
}
}, 5000)
如果延遲將影響report.status,使用ref來存盤report.status,并在回呼中讀取ref值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/333303.html
標籤:
下一篇:我如何將波斯數字轉換為英文數字?
