Javascript 来自API的带有React的空响应
我正在使用GoogleBooksAPI获取数据。当我点击按钮获取数据时,响应是一个空数组。我不知道异步函数有什么问题Javascript 来自API的带有React的空响应,javascript,reactjs,async-await,react-hooks,use-state,Javascript,Reactjs,Async Await,React Hooks,Use State,我正在使用GoogleBooksAPI获取数据。当我点击按钮获取数据时,响应是一个空数组。我不知道异步函数有什么问题 导出默认函数SearchInput(){ 常量[inputSearch,setInput]=useState(“”) const[bookSearch,setBookSearch]=useState([]) //用于从API检索数据的异步函数 常量fetchBooks=async()=>{ const res=等待取数( `https://www.googleapis.com/b
导出默认函数SearchInput(){
常量[inputSearch,setInput]=useState(“”)
const[bookSearch,setBookSearch]=useState([])
//用于从API检索数据的异步函数
常量fetchBooks=async()=>{
const res=等待取数(
`https://www.googleapis.com/books/v1/volumes?q=flowers+inauthor:keyes&key=${apikey}`
);
const data=wait res.json();
setBookSearch(图书搜索);
console.log(bookSearch);//显示一个空数组
}
//搜索功能
常量handleSearch=(e)=>{
e、 预防默认值();
取书();
}
返回(
搜索簿
libro:{inputSearch}
//这将触发搜索功能
{setInput(e.target.value)}/>
搜寻
);
}
在您的fetchBooks()
中,每次通过调用setBookSearch(bookSearch)
将bookSearch
状态设置为自己的值。由于默认情况下bookSearch
的值是空数组,因此每次都将是空数组。确保使用获取的数据更新状态:
const fetchBooks=async()=>{
const res=等待获取(URL);
const data=wait res.json();
setBookSearch(数据);
console.log(bookSearch);//尚未设置!
};
您还尝试在“更新”状态后立即记录该状态。不要忘记,useState
是异步的,就像类组件中的setState
一样。您不能在一行上更新状态,而假定它在下一行上已更改。您可能会记录未更改的状态。如果要在新值更改后记录它,可以使用useffect
hook.,因为您告诉它:const[bookSearch,setBookSearch]=useState([])
所以bookSearch
以空数组开始,并且永远不会更改值。