[英]Ajax call in React Starter Kit
我正在使用React Starter Kit來創建我的第一個React應用程序,並且我在Ajax調用中苦苦掙扎。 我看到該工具包嵌入了一種執行Ajax調用的方式(通過內部用於應用程序路由的方式):
import fetch from '../../core/fetch';
我已經在組件中添加了它,然后在組件加載時嘗試執行Ajax調用。 這是我的代碼:
componentDidMount() {
var moduleManager = 'https://my_domain.com/my_endpoint';
async function getModules (url) {
const response = await fetch(url);
const content = await response.json();
return content;
};
this.state.modulesList = getModules(moduleManager);
console.log(this.state.modulesList);
}
我還在渲染函數中使用狀態值:
render() {
var rows = [];
for (var i = 0; i < this.state.modulesList.length; i++) {
rows.push(
<li>{this.state.modulesList[i]}<li/>
);
}
這段代碼一起記錄在我的控制台中:
Promise {[[PromiseStatus]]: "pending", [[PromiseValue]]: undefined}
然后(成功)執行了Ajax調用,我的控制台現在顯示以下內容:
Promise
__proto__:Promise
[[PromiseStatus]]:"resolved"
[[PromiseValue]]:Array[16]
所需的行為當然是更新我的視圖:執行ajax調用時,每個數組成員顯示一行。
我想念什么?
謝謝
我建議做什么:
constructor() {
...
// Bind your async function to your stateful component's class
this.getModules = this.getModules.bind(this);
}
async getModules(url) {
try {
// Perform the ajax call
const response = await fetch(url);
// Convert respone to json
const content = await response.json();
// Process your content (if needed)
...
// Call setState() here
this.setState({someContent: content});
} catch(e) {
console.error(e);
}
}
componentDidMount() {
this.getModules(`${URL}`);
}
您實際上無法從async
函數返回獲取/解析的數據。 根據此MDN鏈接 , async
函數將返回promise
,而不是解析后希望獲得的實際數據。
在您的情況下發生的事情是,您實際上正在嘗試從常規(sync)函數(componentDidMount)內部的async
函數接收返回值。 您可以執行我建議的操作,也可以在實際的componentDidMount
函數中使用.then()
在解析並解析了承諾后使用setState
。
我建議在繼續之前閱讀有關async
功能和Promise
。
祝你好運!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.