我有一个FlatList,我试图让每个条目的x, y, width, height
做一些动画。我已经看到.measure
甚至useRef
可以做到这一点,但我不知道如何在FlatList的renderItem
中做,因为我不能在其中使用钩子。
function MyComponent() {
const renderItem = React.useCallback(
({ item, index }) => {
const coords = // ! How can I get these?
return (
<View key={item.id} style={containerStyle}>
<TouchableOpacity>
<Image
source={{ uri: item.uri }}
style={memoizedStyles.media}
/>
</TouchableOpacity>
</View>
);
},
[],
);
return (
<FlatList
data={myData}
numColumns={numColumns}
renderItem={renderItem}
/>
);
}
}
我不确定可滚动的FlatList是否会增加复杂性。也许最好测量onPress
或其他什么?无论如何,一些帮助将是很好的,谢谢!
1条答案
按热度按时间oyjwcjzk1#
你是对的,你不能直接在
renderItem
回调中使用钩子,但是你可以创建自己的 Package 器组件并调用它:就获得项目大小而言,您当然可以使用
useRef
和ref.measure(...)
来完成此操作,但正如React Native文档所指出的,使用onLayout
属性可以更快、更容易地获得结果。coords
最初将是未定义的,但是一旦每个Item
渲染/重新渲染,coords
将包含{x,y,left,top,width,height}
。因此,
x
和y
值是相对于每个项目的视图容器,并不是超级有用的,对不起!看起来react-native-web还在
LayoutEvent
中提供了left
和top
值,这些值在其他平台上是不可用的。因此,我们应该使用.measure(..)
:pageX
/pageY
-页面上的绝对坐标,还有measureLayout()
函数可以给你相对于另一个组件的坐标。