React Native防止重复点击

2017-08-11  本文已影响858人  沐风雨木

众所周知,目前RN的反应速度距离原生还是差一点点,再加上本人单身25年的手速那更是比平常人快了不是一点半点,所以经常导致点击多下没反应(暂时没反应),之后打开n多相同的界面(具体多少那就要看你手速了)。本篇就是为了解决这一问题而存在的,闲话少说,见正文:

情景一:

直接点击跳转到下一个页面:
在constructor中初始化state,设置isDisable初始值为false。

    constructor(props) {
        super(props);
        this.state = {
            isDisable: false,
        };
    }

在需要防止点击的地方加入,有的控件可能没有点击事件,在这里需要用下面这三个简单封装一下。因为TouchableHighlightTouchableNativeFeedbackTouchableOpacity这三个都继承TouchableWithoutFeedback所有的属性,所以在这里用disabled这个属性来控制是否可点击。

Paste_Image.png
<TouchableHighlight
    disabled={this.state.isDisable}
    onPress={() => {
                        this.setState({isDisable: true});
                    }}
 </TouchableHighlight>

情景二:

跳转到下一个页面,还会返回的:
直接在上述onPress方法中,添加一个定时器

   this.timer = setTimeout(
                            () => {
                                this.setState({isDisable: false});
                            },
                            1000
                        );

为了防止发生致命错误(闪退)是与计时器有关,具体来说,是在某个组件被卸载(unmount)之后,计时器却仍然在运行。需要在unmount组件时清除(clearTimeout/clearInterval)所有用到的定时器,代码如下:

 componentWillUnmount() {
        // 请注意Un"m"ount的m是小写

        // 如果存在this.timer,则使用clearTimeout清空。
        // 如果你使用多个timer,那么用多个变量,或者用个数组来保存引用,然后逐个clear
        this.timer && clearTimeout(this.timer);
    }
上一篇下一篇

猜你喜欢

热点阅读