Ken428965 2022-12-26 20:47 采纳率: 53.6%
浏览 32
已结题

react,如何实现:先成功传递出最新的filters数据,而后再向数据库获取经过最新的ftilters数据?

在使用的react版本如下:

img


已写的代码:

import React, { useEffect, useState } from 'react'
function HouseList() {
// ...
  const [filters, setFilters]  = useState({})
  const searchHouseList = async (value) => {
    await API.get('/houses', {
      params: {
        cityId: value,
        ...filters,
        start: 1,
        end: 20
      }
    }).then(res => {
      console.log(filters)
// ...
    })
  }
  const onFilter = filters => {
    setFilters(filters)
  }
// ...

return (
// ...
)
}
export default HouseList

代码里的filters是经过筛选后的数据,目前效果是,第一次拿不到filters数据,第二次拿到的是第一次ftilters数据,后面每次拿到的都是前一次ftilters数据

请问如何修改代码,才能实现先成功传递出最新的filters数据,而后再向数据库获取最新的filters数据,即第一次就成功获取到想要的数据?
请在现有代码基础上展示举例说明,谢谢

  • 写回答

1条回答 默认 最新

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2022-12-26 21:10
    关注

    你可以使用useEffect来实现这个功能。useEffect是一个React hook,它允许你在组件渲染后执行副作用(例如数据获取)。

    你可以使用useEffect来监听filters的变化,并在其发生变化时执行数据获取。


    首先,你需要导入useEffect:

    import { useEffect } from 'react'
    

    然后,你可以在HouseList函数内使用useEffect:

    useEffect(() => {
      searchHouseList(value)
    }, [filters])
    

    这段代码会在filters发生变化时调用searchHouseList函数。


    你还可以将useEffect的第二个参数设置为一个数组,表示只有在这个数组内的值发生变化时才会触发useEffect。例如,如果你希望只在cityId发生变化时才调用searchHouseList,你可以将第二个参数设置为[cityId]。


    完整代码如下:

    import React, { useEffect, useState } from 'react'
    
    function HouseList() {
      const [filters, setFilters]  = useState({})
      const searchHouseList = async (value) => {
        await API.get('/houses', {
          params: {
            cityId: value,
            ...filters,
            start: 1,
            end: 20
          }
        }).then(res => {
          console.log(filters)
    // ...
        })
      }
      const onFilter = filters => {
        setFilters(filters)
      }
    
      useEffect(() => {
        searchHouseList(value)
      }, [filters])
    
      return (
    // ...
      )
    }
    
    export default HouseList
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月27日
  • 已采纳回答 12月27日
  • 创建了问题 12月26日

悬赏问题

  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计