将数组对象渲染到 FlatList React Native
Render Array Objects into FlatList React Native
我通过我的 API 从 axios 中获取数据,但是当我渲染它的数据时,它显示给我的是空白模板。如果我做错了,请告诉我。我用 api 响应粘贴了我的代码。
谢谢
console.log => response.data
Data Array [
Object {
"ID": 2466,
"ItemName": "WWE2K20"
}
]
我的组件
import React, { Component } from 'react';
import { Container, Header, Content, Card, CardItem, Body, Text } from 'native-base';
import { View, StyleSheet, FlatList, Image } from 'react-native';
import axios from 'axios';
export default class HomeScreen extends Component {
constructor() {
super()
this.state = {
itemList: []
}
}
async componentDidMount() {
await axios.get('myapiuri')
.then((response) => {
this.setState({
itemList: response.data
});
console.log("Data", this.state.itemList)
})
.catch(error=>console.log(error))
}
render() {
return (
<Container>
<Content>
<FlatList
data={this.state.itemList}
renderItem={(item) => {
return(
<Text>{item.ItemName}</Text>
);
}}
keyExtractor={(item) => item.ID}
/>
</Content>
</Container>
);
}
}
我发现了一些问题。
首先您需要在 renderItem 中使用 ({item}),如评论中所述。
其次,您正在将 async/await 与 then 块混合。在这种情况下,不需要 async/await.
所以你的代码必须是:
export default class HomeScreen extends Component {
constructor() {
super();
this.state = {
itemList: []
};
}
componentDidMount() {
axios
.get("myapiuri")
.then(response => {
this.setState({
itemList: response.data
});
console.log("Data", this.state.itemList);
})
.catch(error => console.log(error));
}
render() {
return (
<Container>
<Content>
<FlatList
data={this.state.itemList}
renderItem={({ item }) => {
return <Text>{item.ItemName}</Text>;
}}
keyExtractor={item => item.ID}
/>
</Content>
</Container>
);
}
}
如果还有问题,请看这个例子:
<FlatList
data={this.state.itemList}
renderItem={**(item)** => {
return(
<Text>{item.ItemName}</Text>
);
}}
keyExtractor={(item) => item.ID}
/>
这里"item"是一个对象,它有,ID和ItemName。当你像这样打电话时,这个项目不被识别为一个对象,这就是为什么没有显示,
({ item })
你应该把上面的调用改成这样。然后项目识别为对象,您可以将其属性称为,item.Id或item.ItemName
我想您明白我的意思,为什么您的代码无法正常工作。请学习 react-native 生命周期。 componentDidMount 不需要异步,在组件渲染后,componentDidMount 将调用,而 componentWillMount 将在 component loading.componentWillReceiveProps 调用时同时调用,当组件的任何状态发生变化时。
我通过我的 API 从 axios 中获取数据,但是当我渲染它的数据时,它显示给我的是空白模板。如果我做错了,请告诉我。我用 api 响应粘贴了我的代码。 谢谢
console.log => response.data
Data Array [
Object {
"ID": 2466,
"ItemName": "WWE2K20"
}
]
我的组件
import React, { Component } from 'react';
import { Container, Header, Content, Card, CardItem, Body, Text } from 'native-base';
import { View, StyleSheet, FlatList, Image } from 'react-native';
import axios from 'axios';
export default class HomeScreen extends Component {
constructor() {
super()
this.state = {
itemList: []
}
}
async componentDidMount() {
await axios.get('myapiuri')
.then((response) => {
this.setState({
itemList: response.data
});
console.log("Data", this.state.itemList)
})
.catch(error=>console.log(error))
}
render() {
return (
<Container>
<Content>
<FlatList
data={this.state.itemList}
renderItem={(item) => {
return(
<Text>{item.ItemName}</Text>
);
}}
keyExtractor={(item) => item.ID}
/>
</Content>
</Container>
);
}
}
我发现了一些问题。
首先您需要在 renderItem 中使用 ({item}),如评论中所述。
其次,您正在将 async/await 与 then 块混合。在这种情况下,不需要 async/await.
所以你的代码必须是:
export default class HomeScreen extends Component {
constructor() {
super();
this.state = {
itemList: []
};
}
componentDidMount() {
axios
.get("myapiuri")
.then(response => {
this.setState({
itemList: response.data
});
console.log("Data", this.state.itemList);
})
.catch(error => console.log(error));
}
render() {
return (
<Container>
<Content>
<FlatList
data={this.state.itemList}
renderItem={({ item }) => {
return <Text>{item.ItemName}</Text>;
}}
keyExtractor={item => item.ID}
/>
</Content>
</Container>
);
}
}
如果还有问题,请看这个例子:
<FlatList
data={this.state.itemList}
renderItem={**(item)** => {
return(
<Text>{item.ItemName}</Text>
);
}}
keyExtractor={(item) => item.ID}
/>
这里"item"是一个对象,它有,ID和ItemName。当你像这样打电话时,这个项目不被识别为一个对象,这就是为什么没有显示,
({ item })
你应该把上面的调用改成这样。然后项目识别为对象,您可以将其属性称为,item.Id或item.ItemName
我想您明白我的意思,为什么您的代码无法正常工作。请学习 react-native 生命周期。 componentDidMount 不需要异步,在组件渲染后,componentDidMount 将调用,而 componentWillMount 将在 component loading.componentWillReceiveProps 调用时同时调用,当组件的任何状态发生变化时。