【发布时间】:2019-10-20 22:13:21
【问题描述】:
我有一个关于 useEffect 和 useState 里面的问题。
我正在构建一个组件:
const [id, setId] = useState(0);
const [currencies, setCurrencies] = useState([]);
...
useEffect(()=> {
const getCurrentCurrency = async () => {
const response = await fetch(`https://api.exchangeratesapi.io/latest?base=GBP`);
const data = await response.json();
const currencyArray = [];
const {EUR:euro ,CHF:franc, USD: dolar} = data.rates;
currencyArray.push(euro, dolar/franc,1/dolar);
console.log("currencyArray", currencyArray);
setCurrencies(currencies => [...currencies, currencyArray]);
}
getCurrentCurrency();
}, [id, currencies.length]);
仅在 id 更改时用于发出新的 API 请求。每次更改 ID 时,我都需要使用新数据发出新请求。就我而言,现在我有无限循环。我尝试使用依赖项,但它没有按预期工作。
【问题讨论】:
-
如果你只想在ID改变时更新,为什么需要
currencies.length1 -
即使只有 id 依赖也存在无限循环。我更改了 useEffect 中的状态,所以这是原因,但我不知道如何解决它。我尝试使用多个依赖项(这就是我添加
currencies.length的原因)但它不起作用 -
我的 sn-p 的第一行。
-
id来自哪里? -
const [id, setId] = useState(0);然后我在处理程序中的某处更改它,以便在滑块中的幻灯片之间移动,如下所示:const goToPrevSlide = () => { id === 0 ? setId(2) : setId(id-1); } const goToNextSlide = () =>{ id === 2 ? setId(0) : setId(id+1); }
标签: reactjs react-hooks