showPosts = async () => {
var userID = await AsyncStorage.getItem('userID');
fetch(strings.baseUri+"getPostWithUserID", {
method: 'POST',
headers: {
Accept: 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify({
"user_id": userID
})
})
.then((response) => response.json())
.then((responseJson) => {
let jsonObj = JSON.parse(JSON.stringify(responseJson));
if (jsonObj.status=="true") {
this.setState({
data: responseJson.data,
imageSrc: responseJson.data[0].imgSrc,
post_type: responseJson.data[0].post_type,
videoSrc: responseJson.data[0].video,
});
}
})
.catch((error) => {
console.error(error);
});
}
我正在从api获取数据,然后在Flatlist中使用它。
alert(responseJson.data)
是我得到的。
现在,我的responseJson.data[0].imgSrc
和responseJson.data[0].video
遍历每个对象,我可以通过Flatlist在屏幕上显示它。但这不是responseJson.data[0].post_type
中的情况。
responseJson.data[0].post_type
仅从JSON数组中提取第一个对象的post_type
。我还在this.state.post_type
中添加了extraData
。
请告诉我如何从Json数组访问数据,然后在Flatlist中使用它们。
更新代码
<FlatList
data={this.state.data}
renderItem={ ({item,index}) => this._renderItem(item,index) }
extraData={[ this.state.data, this.state.checked, this.state.post_type ]}
/>
_renderItem = ( item, index ) => {
return(
{ item.post_type == "image" ?
<Image
//source={this.props.item.image}
source={image}}
//source={{ uri: strings.sourceUri+"userimage/"+item.imgSrc }}
style={styles.photo}
/>
:
<Video
source={video}
ref={(ref) => { this.player = ref }}
style={{ width: 300, height: 350, }}
/>
}
);
}
答案 0 :(得分:0)
您能检查一下是否可行吗?
<FlatList
data={this.state.data}
renderItem={ ({item,index}) => this._renderItem(item,index) }
extraData={[ this.state.data, this.state.checked, this.state.post_type ]}
/>
_renderItem = ( item, index ) => {
if( item.post_type === "image")
return(
<Image
//source={this.props.item.image}
source={image}
//source={{ uri: strings.sourceUri+"userimage/"+item.imgSrc }}
style={styles.photo}
/>);
else
return(
<Video
source={video}
ref={(ref) => { this.player = ref }}
style={{ width: 300, height: 350, }}
/>);
}
还可以看到,在来源之后的<Image>
中,我给出了两种来源方式