【发布时间】:2019-10-18 15:31:54
【问题描述】:
我正在尝试设置一个自定义挂钩来处理我的项目中的所有 api 获取。我可以成功拨打电话并存储数据,但仅限于第一个电话之后的电话。我非常有信心,由于竞争条件和异步的性质,第一次调用不会返回任何内容。
这是我的钩子:
import { useState, useEffect } from 'react'
import api from 'services/api'
const useHopServiceApi = () => {
const [data, setData] = useState([])
const [url, setUrl] = useState('')
const [body, setBody] = useState({})
const [isLoading, setIsLoading] = useState(false)
const [isError, setIsError] = useState(false)
useEffect(() => {
const fetchData = async () => {
setIsError(false)
setIsLoading(true)
try {
const result = await api.post(url, body)
setData(result.d)
} catch (error) {
setIsError(true)
}
setIsLoading(false)
}
if (url && body) {
fetchData()
}
}, [url, body])
return [{ data, isLoading, isError }, setUrl, setBody]
}
export default useHopServiceApi
以及它被调用的组件:
const HomePage = (props) => {
const [{ data, isLoading, isError }, doFetch, setBody] = useHopServiceApi()
const handleClickSelectInterests = () => {
setBody({ count: 1 })
doFetch('/GetPopularCities')
console.log('data:', data)
}
}
当我点击按钮(触发 api 调用)时,数据作为空数组被注销,但在随后的点击中,它会被数据填充。
【问题讨论】:
标签: reactjs react-hooks