在编写hooks的时候,有遇到一个问题,是否可以将useEffect里面获取到的数据进行返回?
export const useGetWorkData = () => {
const { workDone } = useStore()
useEffect(() => {
const asyncFunc = async () => {
if(workDone) {
const resultData = await fetchData(workDone.id) // 想要返回:resultData 这个值
}
}
asyncFunc()
}, [workDone])
// 这里想要返回在useEffect里面获取到的resultData,请问应该如何做呢?(要求必须要等到workDone有值进行返回)
return resultData
}
目前的疑问就是:
1、是否将useEffect
获取到的数据进行返回呢?
2、我能想到的办法就是hook下定义一个变量,在useEffect中进行接受,然后返回这个变量。
但是这里的疑问就是,如何确保返回的hook是在useEffect执行完成之后赋予了值的返回?
3、是否可以进行等待workDone
有值了(最开始workDone
没有值,在App.ts有初始化之后才会进行返回),才返回。
问题1
可以通过 useState 和 useEffect 结合来实现。useEffect 中获取到的数据可以通过 useState 存储,并在 Hook 中返回这个状态。
问题2
使用 useState 来存储数据,并在 useEffect 中更新状态。React 会在状态更新后重新渲染组件,确保返回的数据是最新的。
问题3
可以在 useEffect 中检查 workDone 是否有值,然后再进行数据获取和状态更新。初始状态可以设置为 null 或者其他合适的默认值,表示数据尚未获取到。