当前位置: 首页 > 知识库问答 >
问题:

防止双重抽头

阙俊友
2023-03-14

我有一个TouchableHighlight包装了一个文本块,当点击它时,会打开一个新的场景(我使用的是react native router flux)。
除了快速点击TouchableHighlight之外,一切正常,场景可以渲染两次。
我想防止用户快速点击该按钮。

在本机中实现这一点的最佳方法是什么?我研究了手势应答器系统,但没有任何例子或类似的东西,如果你是新来的,像我一样,会让人困惑。

共有3个答案

巫马庆
2023-03-14

也许您可以使用0.22中为可触摸元素引入的新禁用功能?我在想这样的事情:

组成部分

<TouchableHighlight ref = {component => this._touchable = component}
                    onPress={() => this.yourMethod()}/>

方法

yourMethod() {
    var touchable = this._touchable;
    touchable.disabled = {true};

    //what you actually want your TouchableHighlight to do
}

我自己都没试过。所以我不确定它是否有效。

濮阳宁
2023-03-14

以下工作原理是防止路由到同一路由两次:

import { StackNavigator, NavigationActions } from 'react-navigation';

const App = StackNavigator({
    Home: { screen: HomeScreen },
    Details: { screen: DetailsScreen },
});

// Prevents double taps navigating twice
const navigateOnce = (getStateForAction) => (action, state) => {
    const { type, routeName } = action;
    return (
        state &&
        type === NavigationActions.NAVIGATE &&
        routeName === state.routes[state.routes.length - 1].routeName
    ) ? state : getStateForAction(action, state);
};
App.router.getStateForAction = navigateOnce(App.router.getStateForAction);
凌征
2023-03-14

您要做的是限制分接回调,以便它们只运行一次。

这被称为节流,您可以使用下划线:以下是方法:

_.throttle(
    this.thisWillRunOnce.bind(this),
    200, // no new clicks within 200ms time window
);

下面是我的react组件的外观。

js prettyprint-override">class MyComponent extends React.Component {
  constructor(props) {
    super(props);
     _.throttle(
        this.onPressThrottledCb.bind(this),
        200, // no new clicks within 200ms time window
    );
  }
  onPressThrottledCb() {
    if (this.props.onPress) {
      this.props.onPress(); // this only runs once per 200 milliseconds
    }
  }
  render() {
    return (
      <View>
        <TouchableOpacity onPress={this.onPressThrottledCb}>
        </TouchableOpacity>
      </View>
    )
  }
}

我希望这对你有帮助。如果你想了解更多,请检查此线程。

 类似资料:
  • 我们的代码使用Asyncresttemplate如下所示

  • 问题内容: 给定当前的CSS网格示例,如何折叠边框以避免出现双边框? 这是使用Html表实现的如此简单的事情。如何使用? 问题答案: 您可能会这样: 另一个想法是依靠渐变来填补空白,如下所示: 您还可以调整初始解决方案以使其更加灵活,并且可以在一行中处理任意数量的项目。 在整个页面上运行以下代码并调整窗口大小:

  • 我希望得到一些关于我打算在ASP.NET MVC4应用程序中防止重复记录的方法的反馈,以及我对用户体验没有的冲击效果。 web表单有六个输入字段和一个保存按钮(以及一个取消按钮),用户可以花10分钟填写表单。

  • 问题内容: 我想创建一个表来存储设备设置。该表具有三行:id,parameter_name和parameter_value。 该表是通过执行以下查询语句创建的: 然后通过执行以下方法存储行: 创建数据库后,将存储默认值: 但是,方法insertRow()的问题在于它无法防止重复输入。 有谁知道在这种情况下如何防止重复输入? 问题答案: 您可以使用列约束。 UNIQUE约束导致在指定列上创建唯一索引

  • 问题内容: 在angular中,我们可以设置一个按钮来发送ajax请求,如下所示: 并在控制器中: 因此,为防止重复提交,我可以在单击按钮时将标志设置为buttonclicked = true,而在ajax回调完成时将其取消设置。但是,即使这样,控制权仍会归还给有角力的人,他们将更新Dom。这意味着有一个很小的窗口,在原始按钮单击完全100%完成之前,可以再次单击该按钮。 这是一个小窗口,但仍然可

  • 问题内容: 发送XMLHttpRequest-s时是否可以防止浏览器遵循重定向(即,获取重定向状态代码并自己处理)? 问题答案: 不符合XMLHttpRequest对象的W3C标准(添加了重点): 如果响应是HTTP重定向: 如果Location头传达的URL的原点与XMLHttpRequest的原点是相同的原点,并且重定向不违反无限循环预防措施,请在遵循相同原点请求事件规则的情况下 透明地遵循重