我正在嘗試創建一個 url 陣列,該陣列稱為“句子”。到目前為止,我已經看到,如果要將 API 回應放入陣列中,則必須使用 useState。到目前為止,這是我嘗試過的。
const [sentences, setSentences] = useState([]);
const getOpenAIResponse = () => {
for (var i = 0; i < 6; i ) {
openai.createImage({
prompt: prompts[i],
n: 1,
size: "256x256",
}).then((response) => {
setSentences(response.data.data[0].url)
console.log(sentences)
})
}
};
問題是句子只是用生成的下一個 url 回應重繪 。使用 setSentences.push(...) 不起作用。你有什么推薦的嗎?
uj5u.com熱心網友回復:
新筆記
看起來我沒有考慮到,在getOpenAIResponse運行時,你呼叫openai.createImage了 6 次,每次運行你都會得到一個需要添加到sentences. 這是一些應該適合您的更新代碼:
const getOpenAIResponse = () => {
imagePromises = [];
// Collect all image promises in an array
for (var i = 0; i < 6; i ) {
imagePromises.push(
openai.createImage({
prompt: prompts[i],
n: 1,
size: "256x256",
})
);
}
// Do something once all promises resolve
Promise.all(imagePromises)
.then((responses) => {
setSentences([
// Keep current list of sentences
...sentences,
// Add new sentences to old list of sentences
...responses.map(response => response.data.data[0].url),
]);
});
};
舊筆記
在您擁有的地方setSentences(response.data.data[0].url),這只會用 回傳的一個特定句子替換您現有的 ARRAY 句子openai.createImage。您想要的是獲取回傳的 URL,將其添加到sentences陣列中,然后更新狀態。
為此,請將您的setSentences行替換為setSentences(sentences.concat(response.data.data[0].url))
我沒有看到你以前是如何使用的.push,但是.push沒有“回傳”更新的陣列,是的.concat!
您可以通過以下兩個測驗在 Chrome 開發人員控制臺中看到這一點:
// This returns 4 which is the size of the array!
[1,2,3].push(4);
// These return [1,2,3,4] which is the new array, with the added new element at the end
[1,2,3].concat(4);
[1,2,3].concat([4]);
uj5u.com熱心網友回復:
您可以使用擴展運算子將新的 url 添加到陣列中。
setSentences([...sentences, response.data.data[0].url])
您還可以使用 concat 方法將新的 url 添加到陣列中。
setSentences(sentences.concat(response.data.data[0].url))
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/536361.html
