小编ale*_*s84的帖子

React——点击按钮定时器开始计时

我正在用 React 构建一个小游戏,并准备在其中包含一个倒计时器。

有很多关于如何使用 React 创建计时器或倒计时器的教程(包括 React 官方文档中的教程)。然而,它们都使用componentDidMountcomponentWillUnmount生命周期方法来设置和分别清除间隔。

这工作正常,但计时器在组件安装时开始计时。我想要一个在单击时开始计数的计时器。

实现这种行为的适当的生命周期方法是什么?我已经尝试过了componentWillUpdatecomponentDidUpdate但没有效果。

我的第一个想法是使用 gameOn 状态属性,以便仅在游戏开启时(即按下开始按钮)才激活计时器,但这不起作用,因为(我猜)我将 gameOn 设置为 true,很久之后组件 didMount。

我还尝试在 Timer 组件上移动这两种方法以及适当的状态 ({secondsElapsed: 0}),因为 Timer 是一个单独的组件,通过 props 与其父组件进行通信。这也没有运气。

最后,我尝试设置this.interval = null;构造函数,但这对计时器的运行方式没有任何影响。

我认为问题的根源是生命周期方法,因为这些方法控制何时调用 setInterval 和clearInterval。所以我的问题是这样的:

我应该使用哪些其他生命周期方法组合来实现我所追求的行为?

任何精通的建议将不胜感激。

如果您能清楚地解释为什么以及何时应该this.interval = null;在构造函数中声明,那就加分了。

对于我到目前为止所拥有的示例,基本上可以看看“有状态组件

javascript onclick intervals reactjs

1
推荐指数
1
解决办法
2791
查看次数

React Native——onPress 从“currentTarget”中提取 id

我在 React 上创建了一个游戏,我正在尝试将我的代码调整为 React Native。困扰我的一件事是如何翻译这三行,因为在 RN 中没有可依赖的 DOM 解决方案:

handleClick(e) {

this.props.change(e.currentTarget.id);

}  
Run Code Online (Sandbox Code Playgroud)

这里发生的事情是一个无状态的孩子正在收集一个被点击的元素 id(currentTarget 的),并使用它来调用在父元素中定义的方法。e.currentTarget.id然而,这种公式在 RN 中不起作用。

有没有一种雄辩的方法可以在 RN 中重写这一行?

注意:这里这里有两个与此类似的问题,但答案看起来更像是补丁而不是结构优雅的解决方案。如果您知道某些事情,请发布答案。

编辑:似乎不能绕过 ReactNativeComponentTree。

到目前为止,我有这么多,但这还不起作用:

handlePress(event) {

let number =  ReactNativeComponentTree.getInstanceFromNode(event.currentTarget)._currentElement.id;

this.props.change(number);

}  
Run Code Online (Sandbox Code Playgroud)

第二次编辑:好吧,也许我应该添加一个我想要实现的简单示例。当我点击任何平面列表的元素时,它的 id 应该显示在 Child 的底部。单击重置将恢复默认状态。

下面的简单示例代码:

    import React, { Component } from 'react';
    import { AppRegistry, FlatList, StyleSheet, Text, View, Button } from 'react-native';
    import ReactNativeComponentTree from 'react-native';

    export default class Parent extends Component {

      constructor(props) {
        super(props);    

        this.state …
Run Code Online (Sandbox Code Playgroud)

react-native onpress

1
推荐指数
1
解决办法
4316
查看次数

标签 统计

intervals ×1

javascript ×1

onclick ×1

onpress ×1

react-native ×1

reactjs ×1