将匿名函数传递给onPanResponderMove

ale*_*ngn 12 javascript react-native

我有一个javascript问题,我不知道如何解决它.

在我的React Native应用程序中,我有一个panResponder,我正在使用这个钩子来调用Animated.event.

this.panResponder = PanResponder.create({
    /* ... some other methods ... */
    onPanResponderMove: Animated.event([null, { dx: this.state.x, dy: this.state.y }]),
});
Run Code Online (Sandbox Code Playgroud)

虽然,我希望钩子是一个匿名函数,以便能够做一些其他的事情.我尝试了一些不同的方式来使用匿名函数,但我不能让它工作.

this.panResponder = PanResponder.create({
    /* ... some other methods ... */
    onPanResponderMove: (event, gestureState) => {
        this.callSomething(); 
        return Animated.event([null, { /* I'm not sure what to pass here to map with gestureState... */ }]);
    },
});
Run Code Online (Sandbox Code Playgroud)

我已经阅读了文档,但即便如此,我仍然不知道.

你能帮我吗?

谢谢.

更新:

我终于做了类似的事情:

let valueY;
this.panResponder = PanResponder.create({
    /* ... some other methods ... */
    onPanResponderGrant: () => {
        valueY = this.state.y._value;
    },
    onPanResponderMove: (event, gestureState) => {
        this.callSomething();
        let panY = valueY + gestureState.dy;
        this.state.y.setValue({ y: panY });
    },
});
Run Code Online (Sandbox Code Playgroud)

我不认为这是最好的方式,但...

pat*_*oma 32

问题是Animated.event(...)实际上正在返回一个函数,所以要立即调用它,你必须做这样的事情:

this.panResponder = PanResponder.create({
  ...
  onPanResponderMove: (e, gestureState) => {
    // custom logic here
    ...

    Animated.event([null, {
      dx: this.state.pan.x,
      dy: this.state.pan.y,
    }])(e, gestureState); // <<--- INVOKING HERE!
  },
});
Run Code Online (Sandbox Code Playgroud)

  • 天才!我希望我能理解你的基本功能.效果很好. (2认同)

Mik*_*son 8

如果这对任何人都有用,我就会遇到同样的问题.我最后得到了:

let mover = Animated.event([ null, { dy: this.state.pan.y }]) ;
let repsponder = PanResponder.create({
    ....
    onPanResponderMove: (e, gesture) => {
        this.doSomething() ;
        return mover(e, gesture) ;
        },
    }) ;
Run Code Online (Sandbox Code Playgroud)

重要的一点似乎是在onPanResponderMove代码之外调用Animated.event.请注意,在通常出现的示例中,代码是onPanResponderMove:Animated.event(...)因此创建了一个Animated.event 函数,但如果你在onPanResponderMove代码中(如在alexmngn的第一次尝试中),则为新的在onPanResponderMove代码的每次调用中创建的东西(不管它是什么!)- 我猜是问题所在.