我必须在item.property的FlatList intead的renderItem中使用item.item.property

时间:2018-03-20 23:15:05

标签: javascript react-native jsx react-native-flatlist

我有这段代码

<FlatList
    data={this.state.music_genres}
    extraData={this.state}
    renderItem={(genre) => (
        <ListItem>
            <CheckBox
                onPress={this.onGenreChange.bind(this, item.item, genre.item.id)}
                checked={this.eventHasGenre(item.item, genre.item.id) > -1 ? true : false} />
            <Body>
                <Text>{genre.item.name}</Text>
            </Body>
        </ListItem>
    )}
/>

它有效,但你可以看到我必须使用“genre.item.id”(或“genre.item.name”)而不是简单地使用“genre.id”。
如果我改变了renderItem(就像doc说的那样)

renderItem={({genre}) => ( // look brackets around "genre"

我尝试

...
<Text>{genre.name}</Text>
...

我收到此错误

Cannot read property 'name' of undefined

这是this.state.music_genres的价值

[{…}]
0: {id: 7, name: "Swing", plural: null, language: "it", genre_type: "music"}
length: 1

为什么我不能使用“genre.id”?

1 个答案:

答案 0 :(得分:2)

您无法使用({genre}),因为这是一个对象解构。在这个参数中,将有一个对象(通过反应传递)与属性item,如下所示:

obj : { item: {...}}

因此,当您尝试从此genre获取obj时,您将只会因为此对象参数中没有类型而未定义。

只需renderItem={({item}) => (并使用item.id就可以了。