问题描述
我正在尝试使用 useEffect 寻找 ComponentwillMount 方法的替代品。但是在初始渲染之前不会创建 panresponder 变量。 任何人都可以告诉我我在这里做的任何错误吗?如果没有 useEffect,页面将被渲染。手势不会被捕获。
const makeup = () => {
useEffect(() => {
console.log('I am about to render!');
const panResponder = useRef(
PanResponder.create({
onStartShouldSetPanResponder: (e,gestureState) => true,onPanResponderMove: (e,gestureState) => {....},onPanResponderRelease: (e,gestaureState) => {....}
}));
},[]);
return ARTICLES.map((item,i) => {
console.log("Makeup i:"+i+" item:"+item);
if (i === index.currentIndex - 1) {
return (
<Animated.View
key={item.id}
style={swipeCardPosition.getLayout()}
{...panResponder.panHandlers}
>
</Animated.View>
);
}
if (i < index.currentIndex) {
return null;
}
return (
<Animated.View
key={item.id}
style={index.currentIndex === i ? position.getLayout() : null}
{...(index.currentIndex === i
? { ...panResponder.panHandlers }
: null)}
>
</Animated.View>
);
}).reverse();
};
[Error on execution][1]
[1]: https://i.stack.imgur.com/sls5E.png
解决方法
Check the official docs. 它描述了如何将 PanResponder
与功能组件一起使用。
例如:
const ExampleComponent = () => {
const panResponder = React.useRef(
PanResponder.create({
onStartShouldSetPanResponder: (e,gestureState) => true,onPanResponderMove: (e,gestureState) => {....},onPanResponderRelease: (e,gestaureState) => {....}
})
).current;
return <View {...panResponder.panHandlers} />;
};
您的示例不起作用,原因有很多,最明显的原因是您can't call useRef
inside useEffect
。