1 回答

TA貢獻1780條經驗 獲得超5個贊
正如有人在評論中所說,狀態更新將反映在下一次渲染中。此外,我將解決您的代碼中的一些問題。
const [rates, setRates] = useState({});
useEffect(() => {
// move this in here unless you plan to call it elsewhere
const search = async () => {
const response = await axios.get('https://api.exchangeratesapi.io/latest');
const data = response.data.rates;
setRates(data);
};
search();
}, [/* no dependencies means it runs once */]);
如果您確實計劃在其他地方調用search,請將其包裝在一個useCallback鉤子中,以便您可以將其設置為您的依賴項useEffect(如果沒有,您將收到一個 lint 警告)。useCallback使用空的依賴數組將始終返回相同的函數引用,因此您useEffect將只運行一次,就像現在一樣。
如果您search作為組件中的普通函數離開,則引用會更改每個 render,因此如果您將其作為依賴項包含在內,您的效果將在每次渲染時運行。
const [rates, setRates] = useState({});
const searchCallback = useCallback(async () => {
const response = await axios.get('https://api.exchangeratesapi.io/latest');
const data = response.data.rates;
setRates(data);
}, [])
useEffect(() => {
// move this in here unless you plan to call it elsewhere
search();
}, [searchCallback]);
添加回答
舉報