ReactNative Flatlist - RenderItem 不工作
ReactNative Flatlist - RenderItem not working
所以我尝试使用 React Native 的 FlatList renderItem 属性,但发生了一些非常奇怪的事情。
data
属性 被设置为一个数组,其中的元素不是未定义的,但是,在 renderItem
函数中,它给我一个错误,说参数函数的定义是未定义的,除非我调用参数 item
.
这是我的代码:
export default class Profile extends React.Component {
onLearnMore = (user) => {
this.props.navigation.navigate('UserDetail', user)
}
render() {
return (
<List>
<FlatList
data={data.users}
renderItem={( {item} ) => {
console.log(item)
return (<ListItem
roundAvatar
title={`${item.fName} ${item.lName}`}
onPress={() => this.onLearnMore(item)}
/>)
}}
/>
</List>
)
}
}
如果我将 {item}
与 {userData}
交换,那么 userData
稍后将在函数中未定义。有谁知道为什么会这样?
原因是,data
数组中的每个对象都是通过传递给renderItem
函数的实参item
属性引用的。在这里,您使用的是 object destructuring to extract only item
property of the passed in object, thats why u are using {item}
. When you are changing this name to userData
(which is missing in the function argument), you are getting undefined
. Have a look at the function signature of renderItem
here.
如果您想使用userData
而不是item
,那么您可以将item
重命名为userData
如
renderItem= ({item: userData}) => {...}
希望这会有所帮助!
请仔细阅读本回答。我体验过,浪费了很多时间才搞清楚为什么不重新渲染:
如果状态发生任何变化,我们需要设置 FlatList
的 extraData
属性:
<FlatList data={this.state.data} extraData={this.state} .../>
请在此处查看官方文档:
我缺少项目周围的大括号 { }。
添加后,现在可以正常使用了。
renderItem= {({item}) => this.Item(item.title)}
renderItem={({ item, index }) => {
return (
<Text>{item.fName + item.lName}</Text>
);
}}
好的,我通过这样做解决了这个问题
我的代码是这样的 =
setData(response)
所以我把它变成这个
setData([response])
而且效果很好
我们任何人都可能犯的一个非常粗心的错误:
我拼错了 renderItems。道具名称是 renderItem
<FlatList
data={myData}
keyExtractor={(item, index) => item.id}
renderItem={({item}) => <View></View>}
/>
我很惊讶 react-native 没有向我指出 renderItems 不是有效的 prop 名称或与此相关的任何警告。不管怎样!
所以我尝试使用 React Native 的 FlatList renderItem 属性,但发生了一些非常奇怪的事情。
data
属性 被设置为一个数组,其中的元素不是未定义的,但是,在 renderItem
函数中,它给我一个错误,说参数函数的定义是未定义的,除非我调用参数 item
.
这是我的代码:
export default class Profile extends React.Component {
onLearnMore = (user) => {
this.props.navigation.navigate('UserDetail', user)
}
render() {
return (
<List>
<FlatList
data={data.users}
renderItem={( {item} ) => {
console.log(item)
return (<ListItem
roundAvatar
title={`${item.fName} ${item.lName}`}
onPress={() => this.onLearnMore(item)}
/>)
}}
/>
</List>
)
}
}
如果我将 {item}
与 {userData}
交换,那么 userData
稍后将在函数中未定义。有谁知道为什么会这样?
原因是,data
数组中的每个对象都是通过传递给renderItem
函数的实参item
属性引用的。在这里,您使用的是 object destructuring to extract only item
property of the passed in object, thats why u are using {item}
. When you are changing this name to userData
(which is missing in the function argument), you are getting undefined
. Have a look at the function signature of renderItem
here.
如果您想使用userData
而不是item
,那么您可以将item
重命名为userData
如
renderItem= ({item: userData}) => {...}
希望这会有所帮助!
请仔细阅读本回答。我体验过,浪费了很多时间才搞清楚为什么不重新渲染:
如果状态发生任何变化,我们需要设置 FlatList
的 extraData
属性:
<FlatList data={this.state.data} extraData={this.state} .../>
请在此处查看官方文档:
我缺少项目周围的大括号 { }。 添加后,现在可以正常使用了。
renderItem= {({item}) => this.Item(item.title)}
renderItem={({ item, index }) => {
return (
<Text>{item.fName + item.lName}</Text>
);
}}
好的,我通过这样做解决了这个问题 我的代码是这样的 =
setData(response)
所以我把它变成这个
setData([response])
而且效果很好
我们任何人都可能犯的一个非常粗心的错误:
我拼错了 renderItems。道具名称是 renderItem
<FlatList
data={myData}
keyExtractor={(item, index) => item.id}
renderItem={({item}) => <View></View>}
/>
我很惊讶 react-native 没有向我指出 renderItems 不是有效的 prop 名称或与此相关的任何警告。不管怎样!