gpt4 book ai didi

reactjs - 在 React 函数式组件中每 X 秒调用一次 API

转载 作者:行者123 更新时间:2023-12-03 15:13:28 24 4
gpt4 key购买 nike

我有以下 react 类组件每 10 秒调用一次 API。它的作品没有问题。

class Alerts extends Component {
constructor() {
this.state = {
alerts: {},
}
}

componentDidMount() {
this.getAlerts()
this.timerId = setInterval(() => this.getAlerts(), 10000)
}

componentWillUnmount() {
clearInterval(this.timerId)
}

getAlerts() {
fetch(this.getEndpoint('api/alerts/all"))
.then(result => result.json())
.then(result => this.setState({ alerts: result }))
}

render() {
return (
<>
<ListAlerts alerts={this.state.alerts} />
</>
)
}
}

我正在尝试将其转换为 react 功能组件。这是我迄今为止的尝试。
const Alerts = () => {

const [alerts, setAlerts] = useState([])

useEffect(() => {
getAlerts()
setInterval(() => getAlerts(), 10000)
}, [])

getAlerts() {
fetch(this.getEndpoint('api/alerts/all"))
.then(result => result.json())
.then(result => setAlerts(result)
}

return (
<>
<ListAlerts alerts={alerts} />
</>
)
}

请有人帮我完成这个例子吗? useEffect 是正确的用法还是有更好的选择?

任何帮助,将不胜感激

最佳答案

这里的一个问题是 this.getEndpoint将无法从功能组件工作。好像是原版Alerts类组件缺少一些代码,因为它必须在某处实现。

另一个问题是间隔没有被清理——你应该从效果体返回一个清理函数来清除计时器。

最后没有理由重新定义 getAlerts在每次渲染时,在效果体内部定义一次会更好。

在清理了一些缺失的括号等之后,我的最终实现看起来像:

function getEndpoint(path) {
return ...; // finish implementing this
}


const Alerts = () => {

const [alerts, setAlerts] = useState([])

useEffect(() => {
function getAlerts() {
fetch(getEndpoint('api/alerts/all'))
.then(result => result.json())
.then(result => setAlerts(result))
}
getAlerts()
const interval = setInterval(() => getAlerts(), 10000)
return () => {
clearInterval(interval);
}
}, [])

return (
<>
<ListAlerts alerts={alerts} />
</>
)
}

关于reactjs - 在 React 函数式组件中每 X 秒调用一次 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59146524/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com