React Native:FlatList索引说未定义

时间:2019-05-08 05:00:46

标签: reactjs react-native react-native-flatlist react-native-elements

我正在尝试在react native中检索FlatList上被单击元素的索引。 正如文档所述,我正在将索引传递给renderItem属性。我的代码如下:

/**
 * Goes to the show view of a container
 * @param {*} index 
 */
showContainer = (index) => {
    console.log(index); 
}

render() {
    return (
        <DefaultScrollView style={styles.container}>
            <FlatList
                data={this.props.containers}
                renderItem={(data, index) => (
                    <ListItem
                        containerStyle={{borderBottomWidth: 1, borderBottomColor: "#000"}}
                        key={data.item.id}
                        leftAvatar={Image}
                        onPress={() => {this.showContainer(index)}}
                        rightIcon={{ name: "ios-eye", type: "ionicon" }}
                        subtitle={
                            `${data.item.dummy === true? 'Por favor configura tu dispositivo' : 'Contenido actual: '}`
                        }
                        subtitleStyle={(data.item.dummy == true)? [styles.configurationText, styles.subtitule] : styles.subtitule}
                        title={data.item.name}
                        titleStyle={styles.title}
                    />
                )}/>
        </DefaultScrollView>
    );
}

它唯一有效的方法是将数字作为索引传递,例如: renderItem={(data, index = 0),但是如何传递索引变量以始终具有正确的索引?

预先感谢

3 个答案:

答案 0 :(得分:0)

只需用data, index包装{}并将每个data更改为item

  renderItem={({item, index}) => ( ....
              ....
              key={item.item.id} // like this every where

答案 1 :(得分:0)

代码中的问题是:

您的代码:

   renderItem={(data, index) => ( 

正确的一个:

 renderItem={({ item, index }) => (

您可以更新renderItem,它将解决您的问题。

renderItem={({ item, index }) => (
           <ListItem
                        containerStyle={{borderBottomWidth: 1, borderBottomColor: "#000"}}
                        key={data.item.id}
                        leftAvatar={Image}
                        onPress={() => {this.showContainer(index)}}
                        rightIcon={{ name: "ios-eye", type: "ionicon" }}
                        subtitle={
                            `${data.item.dummy === true? 'Por favor configura tu dispositivo' : 'Contenido actual: '}`
                        }
                        subtitleStyle={(data.item.dummy == true)? [styles.configurationText, styles.subtitule] : styles.subtitule}
                        title={data.item.name}
                        titleStyle={styles.title}
                    />
        )}

答案 2 :(得分:0)

在将数据传递到renderItem之前,您需要分解数据。

因此更改:

 renderItem={(data, index) => ( ...

收件人:

 renderItem={({item, index}) => (...

然后,您可以使用item.id访问数据。

简化的工作演示:

https://snack.expo.io/B1AONkehN