weixin_45835248 2023-09-04 14:26 采纳率: 0%
浏览 9

antd-mobile 的infinitescroll组件带搜索案例出错,如何解决?

  const [gasTrajectoryData, setGasTrajectoryData] = useState([])
  const [qpNo, setQpNo] = useState("")
  const [hasMore, setHasMore] = useState(true)
  const [currentPage, setCurrentPage] = useState(1)
  const pageSize = 10
  useEffect(() => {
     loadMore()
  }, [])

  const onSearch = async () => {
    setCurrentPage(1)
    setGasTrajectoryData([])
    setHasMore(true)
    await loadMore()
  }

  const loadMore = async () => {
    try {
      const response = await apiClient.get(
        `/qpsf/airBottleData/${currentPage}/${pageSize}/?qpNo=${qpNo}`
      )
      if (response.data.data.length === 0) {
        setHasMore(false) // 没有数据
      } else {
        setGasTrajectoryData([...gasTrajectoryData, ...response.data.data])
        setCurrentPage(currentPage + 1)
      }
    } catch (error) {
      console.error("Error fetching data:", error)
    }
  }

照着官网的InfiniteScroll 组件实现带搜索的无限滚动,但是在搜索时出现了一点小问题,第一次点击搜索时,没有数据,再点击一次后数据就有了,打开控制台发现currentPage是旧值导致搜不到

img

加了await和延迟几秒都没用,不知道该怎么解决了

  • 写回答

2条回答 默认 最新

  • qq_37749055 2023-09-04 14:41
    关注

    从你提供的代码来看,它应该能够正常工作。然而,我无法直接看到你的完整代码,所以只能给出一些通用的建议。

    1. 确保你的 apiClient.get 函数正确处理请求,并且服务器返回的数据格式正确。例如,服务器应该返回一个对象,其中包含一个名为 "data" 的属性,该属性包含你要的数据。
    2. 确保你在调用 setGasTrajectoryData 函数时,新的数据已经被添加到旧的数据后面。你的代码已经这样做了,但是要确保 gasTrajectoryData 是一个数组,并且你的服务器返回的数据也可以被合并到数组中。
    3. 确保你在搜索时正确地传递了查询参数 qpNo。你可以在 apiClient.get 函数的URL中打印出来,看看是否正确。
    4. 如果你的问题与异步操作有关,尝试使用 useRef Hook 来存储异步操作的结果。这可以帮助你更好地理解异步操作何时完成。
    5. 最后,确保你的组件已经正确地挂载,并且所有的状态变量和函数都可以被访问到。

    如果这些建议都不能解决你的问题,我建议你提供更多的代码和错误信息,这样我可以更具体地帮助你。

    评论

报告相同问题?

问题事件

  • 创建了问题 9月4日

悬赏问题

  • ¥15 vika文档如何与obsidian同步
  • ¥15 华为手机相册里面的照片能够替换成自己想要的照片吗?
  • ¥15 陆空双模式无人机飞控设置
  • ¥15 sentaurus lithography
  • ¥100 求抖音ck号 或者提ck教程
  • ¥15 关于#linux#的问题:子进程1等待子进程A、B退出后退出(语言-c语言)
  • ¥20 web页面如何打开Outlook 365的全球离线通讯簿功能
  • ¥15 io.jsonwebtoken.security.Keys
  • ¥15 急,ubuntu安装后no caching mode page found等
  • ¥15 联想交换机NE2580O/NE1064TO安装SONIC