我正在研究一个弹出窗口,可以使用PanResponders将其弹出。这样做的目的是使弹出窗口在滑动时隐藏起来,如果要再次显示它,则弹出子组件应以this.show()
重新开始。
在这一点上,如果将弹出窗口滑开并尝试再次this.show()
,则只能显示一次。滑动时,可见性状态不会更改,因为它不会使用this.props.handler
。 this.show()
非常适合显示和隐藏弹出窗口(当然还没有被滑动掉)。
我完全认为错了吗?我想opacity
和this.remove(gestureState)
也可能有问题,因为它并没有重新开始。
孩子:
componentWillMount(){
this.PanResponder = PanResponder.create({
onStartShouldSetPanResponder: (e, gestureState) => true,
onPanResponderMove: (e, gestureState) => {
this.position.setValue({x: 0, y: gestureState.dy})
},
onPanResponderRelease: (e, gestureState) => {
// If swiping popup away to remove
if (this.remove(gestureState)) {
Animated.timing(this.state.opacity, {
toValue: 0,
duration: 200
})
.start(() =>
// Set show of popup to false in parent component (not working???)
this.props.handler
)
}
// Else just touching it a bit
else {
Animated.spring(this.position, {
toValue: { x: 0, y: 0 },
friction: 5
}).start();
}
}
})
}
父母:
constructor(props){
super(props)
this.state = {
showCategories: false,
}
}
// Used to hide popup in child
handler = () => {
alert("hello")
this.setState(prevState => ({
showCategories: !prevState.showCategories
}))
}
// Used to show popup
show = () => {
this.setState(prevState => ({
showCategories: !prevState.showCategories
}))
}