【问题标题】:How to know screen idle on every component of react native?如何知道 react native 的每个组件的屏幕空闲?
【发布时间】:2021-11-15 13:29:25
【问题描述】:

我在网上找到了例子:

https://snack.expo.io/Sy8ulr8B-

主要概念是在每个组件中应用此代码:

this._panResponder = PanResponder.create({
  onStartShouldSetPanResponder: () => {
    this.resetTimer()
    return true
  },
  onMoveShouldSetPanResponder: () => true,
  onStartShouldSetPanResponderCapture: () => { this.resetTimer() ; return false},
  onMoveShouldSetPanResponderCapture: () => false,
  onPanResponderTerminationRequest: () => true,
  onShouldBlockNativeResponder: () => false,
});

【问题讨论】:

标签: react-native panresponder


【解决方案1】:

**我找到了答案: **

import React, { Component } from 'react';
import { Button, PanResponder, View, StyleSheet,TouchableOpacity, Text , Image, Alert} from 'react-native';

const timeNoAction = 15000;

export default class Screen extends Component {
  state = {
    show : false
  };
  _panResponder = {};
  timer = 0;
  componentWillMount() {
    this._panResponder = PanResponder.create({

      onStartShouldSetPanResponder: () => {
        this.resetTimer()
        return true
      },
      onMoveShouldSetPanResponder: () => true,
      onStartShouldSetPanResponderCapture: () => { this.resetTimer() ; return false},
      onMoveShouldSetPanResponderCapture: () => false,
      onPanResponderTerminationRequest: () => true,
      onShouldBlockNativeResponder: () => false,
    });
    this.timer = setTimeout(()=>this.setState({show:true}),timeNoAction )
  }

  resetTimer(){
    clearTimeout(this.timer)
    if(this.state.show)
    this.setState({show:false})
    this.timer = setTimeout(()=>this.setState({show:true}),timeNoAction )
  }

  render() {
    return (
      <View
        style={styles.container}
        collapsable={false}
        {...this._panResponder.panHandlers}>

        {
          this.state.show ? Alert.alert(
            'Alert',
            'You have been inactive for 15sec',
            [
              {text: 'OK', onPress: () => this.resetTimer()},
            ],
            { cancelable: false }
          ) : null
        }
      </View>
    );
  }
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    alignItems: 'center',
    justifyContent: 'center',
    backgroundColor: '#ecf0f1',
  }
});

}

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-11
  • 2021-09-13
  • 1970-01-01
  • 2017-11-22
  • 2019-03-31
  • 2018-06-21
  • 1970-01-01
相关资源
最近更新 更多