解決策の一つが持つカスタムカスタムコンポーネントでは、たonPressにデバウンスを追加します。
class DebounceTouchableOpacity extends Component {
constructor(props) {
super(props);
this.debounce = false;
}
_onPress =() => {
if (typeof this.props.onPress !== "function" || this.debounce)
return;
this.debounce = true;
this.props.onPress();
this.timeoutId = setTimeout(() => {
this.debounce = false;
}, 2000);
};
componentWillUnmount() {
this.timeoutId && clearTimeout(this.timeoutId)
}
render() {
const {children, onPress, ...rest} = this.props;
return (
<TouchableOpacity {...rest} onPress={this._onPress}>
{children}
</TouchableOpacity>
);
}
}
別:類似の挙動
const debounceOnPress = (onPress, time) => {
let skipCall = false;
return (...args) => {
if (skipCall) {
return
} else {
skipCall = true;
setTimeout(() => {
skipCall = false;
}, time)
onPress(...args)
}
}
}
でラッパーに機能したonPressラップあなたは、クリック上のボタンを無効にすることができませんか? –
あなたの質問に「あなたたちがうまくやっていることを望む」のような不必要な混乱を加えないでください。 –
なぜ?何か問題ある。? –