だから私は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}
with {userData}
の場合、userData
は関数の後半で未定義になります。なぜこれが起こるのか誰にも分かりますか?
理由は、data
配列内のすべてのオブジェクトが、item
関数に渡される実際のパラメーターのrenderItem
プロパティを介して参照されるためです。ここでは、 object destructuring を使用して、渡されたオブジェクトのitem
プロパティのみを抽出しています。これが、uが{item}
を使用している理由です。この名前をuserData
(関数の引数にはありません)に変更すると、undefined
になります。 renderItem
here の関数シグネチャを見てください。
userData
の代わりにitem
を使用する場合は、item
の名前をuserData
に変更できます。
renderItem= ({item: userData}) => {...}
これが役立つことを願っています!
この回答を注意深くお読みください。私はそれを経験し、なぜそれが再レンダリングされなかったのかを理解するために何時間も無駄にしました:
次のような状態に変化がある場合は、extraData
のFlatList
propを設定する必要があります。
<FlatList data={this.state.data} extraData={this.state} .../>
こちらの公式ドキュメントをご覧ください。