React Native FlatList 对象显示

oth*_*adi 1 javascript reactjs react-native

我有我从 AsyncStorage 检索的以下对象,我想在 a 中显示它,FlatList但出现以下错误:

Invariant Violation: Invariant Violation: Invariant Violation: Invariant Violation: 试图获取超出范围索引 NaN 的框架

我的 JSON 格式是:

Object {
  "44": Object {
    "pro_id": "44",
    "pro_img": "url",
    "pro_name": " S4 ",
  },
  "52": Object {
    "pro_id": "52",
    "pro_img": "url",
    "pro_name": " S4 ",

  },
}
Run Code Online (Sandbox Code Playgroud)

上面的 JSON 是这样检索的AsyncStorage

retrieveData = async () => {

    try {
       await AsyncStorage.getItem('userFavorites')
       .then(req => JSON.parse(req))
       .then(json => this.setState({ favPro:json }))

    } catch (error) {

    } 
}
Run Code Online (Sandbox Code Playgroud)

我在 中渲染项目的FlatList方法定义如下:

 fav = ({ item }) => {
    return (
      <View>
      <Text>{item.pro_id+ item.pro_name}</Text>
      </View>
    )
}
Run Code Online (Sandbox Code Playgroud)

最后,我渲染FlatList如下:

<FlatList
          data={this.state.favPro}
          renderItem={this.fav}
          keyExtractor={item => item.pro_id}
        />
Run Code Online (Sandbox Code Playgroud)

如何使用FlatList组件显示我的 JSON 数据?

Dac*_*nny 5

FlatList组件需要data道具的数组输入。根据您的 JSON 格式,您似乎传入的是对象而不是数组。

考虑对渲染方法进行以下调整:

// Convert object to array based on it's values. If favPro not 
// valid (ie during network request, default to an empty array)
const data = this.state.favPro ? Object.values(this.state.favPro) : []

<FlatList
  data={data}
  renderItem={this.fav}
  keyExtractor={item => item.pro_id}
/>
Run Code Online (Sandbox Code Playgroud)