【发布时间】:2021-10-04 09:48:08
【问题描述】:
我是 TypeScript 甚至 React Hooks 的新手。我正在尝试从一个名为useFetch() 的自定义钩子中连续获取数据,该钩子接受一个字符串(URL)参数:
import { useEffect, useState } from "react";
export interface Payload {
data: null | string,
loading: boolean
}
const useFetch = (url: string) => {
const [state, setState] = useState<Payload>({data: null, loading: true})
useEffect(() => {
setState(state => ({ data: state.data, loading: true }));
fetch(url)
.then(x => x.text())
.then(y => {
setState({ data: y, loading: false });
});
}, [url, setState])
return state;
}
export default useFetch;
我将该钩子导入App():
import React, { useState, useEffect } from "react";
import useFetch from './utils/useFetch'
import {Payload} from './utils/useFetch';
const App = () => {
const [quote, setquote] = useState<Payload>({data: null, loading: true})
const handleClick = () => setquote(data)
const data = useFetch(
"/api/rand"
);
return (
<div>
<h1>Quotes</h1>
<button onClick={handleClick}>Get Quote</button>
<div>{quote.data}</div>
</div>
)
}
export default App;
第一次加载应用时,它可以工作。当我点击按钮时,我会得到数据(报价)。
但是,当我多次单击它时,API 不会再次被调用,新数据也不会通过。我相信我应该使用useEffect() react 钩子并保持状态(也许我错了),但到目前为止我所有的尝试都无济于事。任何帮助将非常感激。如果我弄清楚了,我肯定会回答这个问题。谢谢!
【问题讨论】:
-
是应该从同一个 url 捕获一个新的引用,还是在每次点击时调用一个不同的 url?
-
@henk 是同一个网址。
标签: javascript reactjs typescript react-hooks