如何避免useEffect 执行两次
const {keyword} = query
const {page, pageSize} = table.pagination
useEffect(() => {
setTable(prevState => ({
...prevState,
pagination: {...prevState.pagination, page: 1}
}))
}, [keyword])
useEffect(() => {
fetchList()
}, [page, pageSize, keyword])
表格改变查询条件时,需要将表格分页重置为第一页。但是fetchList会执行两次。
需要怎么做,才能让fetchList只执行一次
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
正确做法是不应该把重置为第一页这个事情写成一个effect…
如果你还有别的东西要重置(比如重置排序参数、重置分页大小),每个重置都单独写一个effect,那你可能不止重复渲染一次,而是重复渲染n次;
setState的时候自己手动去干这个事情而不是用effect去干;嫌麻烦可以把这个手动干的过程给封起来
使用
debounce
来延迟触发请求应该就行了,也能避免你快速切换页数,修改keyword
,简单写个demohttps://codesandbox.io/embed/...
首先,如果有合并机制,
useEffect
的多个依赖项就没有意义,根据你的代码,keyword
切换仅仅对引起的page
重置,看下面代码:已经在你的 demo 上测试了,可以正常运行
方案之一:
参考解密React state hook