我有这段代码
<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”?
答案 0 :(得分:2)
您无法使用({genre})
,因为这是一个对象解构。在这个参数中,将有一个对象(通过反应传递)与属性item
,如下所示:
obj : { item: {...}}
因此,当您尝试从此genre
获取obj
时,您将只会因为此对象参数中没有类型而未定义。
只需renderItem={({item}) => (
并使用item.id
就可以了。