我安装了react-native-really-awesome-button
包,因为它有一些非常棒的按钮。
不幸的是,onPress
处理程序似乎没有按预期工作。
下面是一个可重现的演示:https://snack.expo.dev/@anshnanda/awesomebutton-not-working您可以清楚地看到,onPress
函数只使用初始状态,并且没有使用新状态进行更新。
很明显,AwesomeButton只是使用了num
的初始状态值,这让我认为该函数是用useMemo
或useCallback
Package 的(可能有bug),然而,通过挖掘source code,我无法找到发生这种情况的原因。
我尝试使用onPressIn
和onPressOut
,这些似乎工作正常,除了UX显然更糟,因为用户没有看到我下载react-native-really-awesome-button
的光滑动画。
1条答案
按热度按时间x6yk4ghg1#
看起来你是在要求确认这是
AwesomeButton
中的一个bug/问题,我同意这一点。onPress
回调存储在React引用中:(来源)在
press
处理程序中调用debouncedPress
:(来源)press
由handlePressOut
回调调用:(来源)animateProgressEnd
处理程序调用传递的onPress
函数(debouncedPress):(来源)因此,是的,React ref
debouncedPress
永远不会更新,以保存您传递的onPress
回调处理程序的较新示例。要解决这个问题,可以在代码中使用React ref来缓存
num
状态,并在printCurrNum
处理程序中引用它。示例:
https://snack.expo.dev/@drew.w.reese/awesomebutton-not-working