Мне нужно выполнить вызов API извлечения, который возвращает URL-адрес, что-то сделать с возвращенным URL-адресом, а затем обновить его через 60 секунд. Это то, чего я мог бы легко достичь без хуков, но я бы хотел решение для хуков.
ВАЖНО : я не собираюсь рефакторинг этого для нескольких компонентов или создания пользовательских хуков для вызова таймера или API.
РЕДАКТИРОВАТЬ : Вопрос в том, является ли это правильным способом обработки таймера в среде перехвата? Есть ли лучший способ?
import React, { useState, useEffect } from 'react'
import { post } from 'utils/requests'
const FetchUrl = ({ id }) => {
const [url, setUrl] = useState('')
let [count, setCount] = useState(0)
const tick = () => {
let newCount = count < 60 ? count + 1 : 0
setCount(newCount)
}
useEffect(() => {
const timer = setInterval(() => tick(), 1000)
if (count === 0) {
post('/api/return-url/', { id: [id] })
.then(res => {
if (res && res.content) {
setUrl(res.content.url)
}
})
}
return () => clearInterval(timer)
})
return url ? (
<span className="btn sm">
<a href={url} target="_blank" rel="noopener noreferrer">go</a>
</span>
) : null
}
export default FetchUrl