将数组中的特定对象显示为平面列表中的第一项
Show certain object from the array as first item in flatlist
我有以下对象数组(只是示例,实际情况可能更多)
const items = [{/* for user 1 */}, {/* for user 2 */}, ... {/* for user 10 */}];
我将数组显示为 Flatlist
中的列表
<FlatList
data={items}
renderItem={renderItem}
keyExtractor={item => item.id}
initialNumToRender={20}
/>
renderItem是这样的
const renderItem = ({ item: user }) => (
<TouchableOpacity
activeOpacity={1}
style={styles.items}
onPress={() => {clickMe(user)}}
>
<UserAvatar url={user.url} />
<Text style={styles.userName}>{ user.name }</Text>
</TouchableOpacity>
);
到目前为止一切正常,列表可以正常显示。
但是假设我想将用户 9 显示为列表中的第一项,我该怎么做?
我试过这样做
const ninthUser = items.find( i => i.id === 9 );
const listWithoutNinth = items.filter( i => i.id !== 9 );
const listWithNinthAsFirstItem = [ ninthUser, ...listWithoutNinth ];
并将 listWithNinthAsFirstItem
传递给 Flatlist 的数据属性,但不知何故它不起作用。
你应该涉及国家。
const [ sortedItems, setSortedItems ] = useState([])
const startSort = () => {
const ninthUser = items.find( i => i.id === 9 );
const listWithoutNinth = items.filter( i => i.id !== 9 );
const listWithNinthAsFirstItem = [ ninthUser, ...listWithoutNinth ];
setSortedItems(listWithNinthAsFirstItem)
}
useEffect(() => {
if (items) {
startSort()
}
}, [items])
然后在 FlatList 中将数据作为 sortedItems
<FlatList data={sortedItems} renderItem={renderItem}
keyExtractor={item => item.id} initialNumToRender={20} />
我有以下对象数组(只是示例,实际情况可能更多)
const items = [{/* for user 1 */}, {/* for user 2 */}, ... {/* for user 10 */}];
我将数组显示为 Flatlist
<FlatList
data={items}
renderItem={renderItem}
keyExtractor={item => item.id}
initialNumToRender={20}
/>
renderItem是这样的
const renderItem = ({ item: user }) => (
<TouchableOpacity
activeOpacity={1}
style={styles.items}
onPress={() => {clickMe(user)}}
>
<UserAvatar url={user.url} />
<Text style={styles.userName}>{ user.name }</Text>
</TouchableOpacity>
);
到目前为止一切正常,列表可以正常显示。
但是假设我想将用户 9 显示为列表中的第一项,我该怎么做?
我试过这样做
const ninthUser = items.find( i => i.id === 9 );
const listWithoutNinth = items.filter( i => i.id !== 9 );
const listWithNinthAsFirstItem = [ ninthUser, ...listWithoutNinth ];
并将 listWithNinthAsFirstItem
传递给 Flatlist 的数据属性,但不知何故它不起作用。
你应该涉及国家。
const [ sortedItems, setSortedItems ] = useState([])
const startSort = () => {
const ninthUser = items.find( i => i.id === 9 );
const listWithoutNinth = items.filter( i => i.id !== 9 );
const listWithNinthAsFirstItem = [ ninthUser, ...listWithoutNinth ];
setSortedItems(listWithNinthAsFirstItem)
}
useEffect(() => {
if (items) {
startSort()
}
}, [items])
然后在 FlatList 中将数据作为 sortedItems
<FlatList data={sortedItems} renderItem={renderItem}
keyExtractor={item => item.id} initialNumToRender={20} />