Передайте анонимную функцию 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 });
},
});
Я не думаю, что лучший способ сделать это, хотя...
Ответы
Ответ 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, который, как я предполагаю, является проблемой.