【发布时间】:2022-01-09 09:40:40
【问题描述】:
我希望每次渲染组件时都调用这两个函数,但它们没有被执行。当我将函数放在依赖数组中时,它会导致无限循环。知道为什么他们没有被调用吗?
function PortfolioComponent() {
const [requestedAssets, setRequestedAssets] = useState([]);
const [assets, setAssets] = useState([]);
useEffect(() => {
async function calcValue() {
Promise.all(
requestedAssets.map(async function (asset) {
try {
const response = await axios.get(assetData(asset.AssetId));
let cp = response.data.market_data.current_price.eur;
let value = Number(cp) * Number(asset.Amount);
return { ...asset, value: value, price: cp };
} catch (error) {
console.log(error.response.data.error);
throw error;
}
})
)
.then((newAssetArray) => {
setAssets(newAssetArray);
console.log(newAssetArray);
console.log(assets);
})
.catch((error) => {
console.log(error);
});
}
async function getAssets() {
try {
const response = await axios.get("http://localhost:4200/assets");
// Do as you wish with response here
const assetResponse = response.data.rows;
setRequestedAssets(assetResponse);
console.log(requestedAssets);
} catch (error) {
console.log(error.response.data.error);
}
}
getAssets();
calcValue();
}, []);
还有一些我刚刚发现的奇怪行为......
比如这行代码:
let cp = await response.data.market_data.current_price.eur;
当我删除 await 关键字并将其保存在 VS 代码中时,数据按预期检索。但是,当我刷新浏览器时,数组再次为空。当我再次添加 await 关键字并保存时也是如此。同样的事情也会发生。
【问题讨论】:
-
在我看来,您根本不需要 useEffect 挂钩。直接调用函数即可。
-
useEffect 对我来说似乎找到了。问题似乎与被调用的两个函数有关。尝试删除函数的内容,然后在其中放置一个控制台,看看它是否工作
-
@FloRagossnig 你不想在反应组件中直接调用它们,因为这会导致重新渲染问题
标签: javascript reactjs axios state use-effect