一般而言,React/Javascript 相對較新,因此將不勝感激。
我目前有一個應用程式,它從一個 API 獲取多個專案的資料。購買是一個字典串列(在此處稱為購買),其中包含資產、單位和價格(以及其他內容)。
buys.map(async buy => {
var data = await queryCoinGeckoAPI(buy);
var market_price = data.market_data.current_price.aud;
var price_change = data.market_data.price_change_24h_in_currency.aud;
var price_change_percentage = data.market_data.price_change_percentage_24h_in_currency.aud;
var profit = buy.units === 0 || buy.price === 0 ? 0 : market_price * buy.units - buy.price;
newDictionary[buy.asset] = {
asset: buy.asset,
market_price: market_price,
price_change: price_change,
price_change_percentage: price_change_percentage,
profit: profit
};
});
一切都很好,當我來記錄 newDictionary 時:
萬歲它有效!
但是,當我不嘗試訪問字典中的這些值時,問題就出現了。如果我嘗試打電話newDictionary['bitcoin']或者Object.keys(newDictionary)甚至
for(let key in newDictionary) {
console.log(key);
console.log(newDictionary[key]);
}
例如我沒有輸出。
回傳未定義
不太確定為什么,也無法在網上找到答案...
我選擇了一本字典,因為我希望能夠更新我的當前狀態(我希望這就是您使用傳播運算子的方式):
setBuys(
buys.map(b => {
{...b, ...newDictionary[b.asset]};
})
);
萬一你需要它的完整功能:
useEffect(() => {
const refreshData = async() => {
var d = await Promise.all(
buys.map(async buy => {
var data = await queryCoinGeckoAPI(buy);
var market_price = data.market_data.current_price.aud;
var price_change = data.market_data.price_change_24h_in_currency.aud;
var price_change_percentage = data.market_data.price_change_percentage_24h_in_currency.aud;
var profit = buy.units === 0 || buy.price === 0 ? 0 : market_price * buy.units - buy.price;
return {
asset: buy.asset,
market_price: market_price,
price_change: price_change,
price_change_percentage: price_change_percentage,
profit: profit
};
})
)
var newDictionary = {};
for (let i = 0; i < d.length; i ) {
newDictionary[d[i].asset] = d[i];
}
console.log(newDictionary);
setBuys(
buys.map(
b => {
{...b, ...newDictionary[b.asset]}
}
)
)
// toast.info('Market updated', {});
}
const interval = setInterval(() => {
refreshData();
}, 60000);
return () => clearInterval(interval);
})
謝謝!
uj5u.com熱心網友回復:
(我什至不確定字典是否是 React 中的東西)。
您可能正在考慮物件,也許這可以幫助您在未來使用谷歌搜索任何相關內容。
我認為傳播運算子是這里的罪魁禍首,嘗試用這個替換它(請原諒格式):
.maps( b => {{b: newArray[b.asset]}}
嘗試添加一些日志陳述句以查看 newArray 的實際內容,也許它實際上是一個物件而不是陣列。
uj5u.com熱心網友回復:
您最后一次setBuys呼叫的問題在于,您根本沒有從 mapper 函式回傳任何內容,因為它使用了{}大括號。
你會想要
setBuys(
buys.map(
b => (
{...b, ...newDictionary[b.asset]}
)
)
)
而是 ( b => (, 不是b => {)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/312973.html
標籤:javascript 反应 字典 javascript对象
上一篇:如何從字串中參考變數?[復制]
