Подтвердить что ты не робот

Передайте анонимную функцию onPanResponderMove

У меня проблема с javascript, и я не уверен, как ее разрешить.

В моем приложении React Native у меня есть panResponder, и я использую этот hook для вызова Animated.event.

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

Хотя, я бы хотел, чтобы hook был анонимной функцией, чтобы иметь возможность делать что-то еще. Я попробовал несколько разных способов использовать анонимную функцию, но я не могу заставить ее работать.

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... */ }]);
    },
});

Я прочитал документацию, но даже с этим я до сих пор не знаю.

Вы можете помочь мне?

Спасибо.

Update:

Наконец-то я сделал что-то вроде этого:

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 });
    },
});

Я не думаю, что лучший способ сделать это, хотя...

4b9b3361

Ответ 1

Дело в том, что 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!
  },
});

Ответ 2

В случае, если это полезно для всех, у меня была одна и та же проблема. Я закончил, примерно:

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

Важный бит, кажется, вызывает Animated.event вне кода onPanResponderMove. Обратите внимание, что в примерах, которые обычно появляются, код находится onPanResponderMove: Animated.event(...), поэтому создается отдельная вещь Animated.event, но если вы находитесь внутри кода onPanResponderMove (как в первой попытке alexmngn), новый вещь (независимо от того, что она есть!) создается при каждом вызове кода onPanResponderMove, который, как я предполагаю, является проблемой.