将状态从子级更新为父级

时间:2018-11-01 10:36:58

标签: javascript reactjs react-native

我正在研究一个弹出窗口,可以使用PanResponders将其弹出。这样做的目的是使弹出窗口在滑动时隐藏起来,如果要再次显示它,则弹出子组件应以this.show()重新开始。

在这一点上,如果将弹出窗口滑开并尝试再次this.show(),则只能显示一次。滑动时,可见性状态不会更改,因为它不会使用this.props.handlerthis.show()非常适合显示和隐藏弹出窗口(当然还没有被滑动掉)。

我完全认为错了吗?我想opacitythis.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
        }))
      }

0 个答案:

没有答案