由于后臺接口并不隨著我們的需求而隨時恭候向瓷,我們經(jīng)常需要自己模擬數(shù)據(jù),就拿ListView來說,dataSource的數(shù)據(jù)如果后臺沒有提供族壳,我一般就選擇直接在這個文件中聲明一個數(shù)組變量,定義幾條數(shù)據(jù)就可以這種方式確實(shí)很簡單趣些,但是寫法跟真正的網(wǎng)絡(luò)請求又不一樣仿荆,當(dāng)真正的請求來的時候,我們需要改動的地方比較多,如下:
const data = [
{"name" : "Melody", age: 21},
{"name" : "ZZ", age: 22},
];
let ds = new ListView.DataSource({
rowHasChanged: (r1,r2) => r1 !== r2,
sectionHeaderHasChanged: (s1, s2) => s1 !== s2
});
this.state = {
dataSource: ds.cloneWithRows(data)
};
因?yàn)椴恍枰埱髷?shù)據(jù)拢操,所以直接dataSource: ds.cloneWithRows(data)
锦亦,但是實(shí)際情況是怎樣呢?
假如是在進(jìn)入這個頁面就有需要請求的數(shù)據(jù):
componentDidMount() {
this.fetchData()
}
fetchData() {
fetch('https://facebook.github.io/react-native/movies.json')
.then((response) => response.json())
.then((responseJson) => {
this.setState({
dataSource: this.state.dataSource.cloneWithRows(responseJson.data)
})
})
.catch((error) => {
console.error(error);
});
}
所以在真正的網(wǎng)絡(luò)請求來的時候令境,最好的方式是我們在本地使用跟網(wǎng)絡(luò)請求回來類似的JSON文件杠园,注意,這里不是讀取JSON文件舔庶,不是用import xxx from './test.json'
這種方式將JSON文件當(dāng)成一個普通文件讀入抛蚁,而是要當(dāng)做一個接口訪問。
其實(shí)實(shí)現(xiàn)方式很簡單惕橙,我之前不知道React Native 是自己開啟了一個本地服務(wù)器的瞧甩,所以導(dǎo)致我一直解決不了這個問題,運(yùn)行React Native它會開啟一個本地服務(wù)器:http://localhost:8081
這個服務(wù)器是開啟在項目根路徑下的弥鹦,也就是說亲配,如果你想要
http://localhost:8081/test.json
這樣訪問你的json文件,那么將該文件放在根路徑下就可以訪問了或者你也可以在根路徑下新建一個文件夾專門存放json文件惶凝,訪問路徑加上文件夾名字即可吼虎。
此時你的代碼看起來像這樣:
fetchData() {
fetch('http://localhost:8081/test.json')
.then((response) => response.json())
.then((responseJson) => {
this.setState({
dataSource: this.state.dataSource.cloneWithRows(responseJson.data)
})
})
.catch((error) => {
console.error(error);
});
}
等到后臺人員拋出真正的接口,只需要修改請求的url就可以了苍鲜。