如何每次在同一个视图上与 react native expo 倒计时

Posted

技术标签:

【中文标题】如何每次在同一个视图上与 react native expo 倒计时【英文标题】:how do count down every time on same view with react native expo 【发布时间】:2021-05-06 13:23:25 【问题描述】:

我是新来的反应和反应本机。我正在使用 expo cli 构建一个反应原生应用程序。每次用户查看视图时如何重新开始倒计时?卸载不起作用,因为这永远不会卸载。 我想要的是倒数到 15 到 0,然后显示继续按钮,但这只能工作一次。

function ContinueStatus( onContinuePress ) 
      let [count, setTimer] = useState(15);
  let [isStarted, setIsStarted] = useState(true);

  useEffect(() => 
    let interval = setInterval(() => 
      setTimer(lastTimerCount => 
          lastTimerCount <= 1 && clearInterval(interval);
          count = lastTimerCount;
          return lastTimerCount - 1
      )
    , 1000) 
    //cleanup the interval on complete
    return () => clearInterval(interval)
  , [isStarted]);

    return( 
      count > 0 ?
        (<Button color="primary" style=styles.createButton>
        <Text bold size=14 color=myTheme.COLORS.WHITE>
          Continue in count second(s)
        </Text>
        </Button> )
      :
       (<Button color="primary" style=styles.createButton onPress=onContinuePress >
            <Text bold size=14 color=myTheme.COLORS.WHITE>
              Continue
            </Text>
          </Button> 
       )
  ) 

render()  
    return (
          <ContinueStatus onContinuePress=this.onContinuePress/> 
  );

【问题讨论】:

所以每次用户进入屏幕,倒计时都会重新开始? 是的,这就是我想要的 【参考方案1】:

问题是当你离开它时你的组件没有卸载。这是 ReactJS 和 React Native 之间的一个显着区别。这个问题可以通过React Navigation和useFocusEffect钩子解决。

useFocusEffect 类似于 React 的 useEffect 钩子。唯一的区别是它仅在屏幕当前聚焦时运行。

因此,将useEffect 替换为useFocusEffect 并确保使用useCallback,就像它描述的in the docs 一样。

您可能还需要通过提供商设置路由器,但不要先尝试。

【讨论】:

谢谢,我尝试了 useFocusEffect 但没有用。我想我必须设置路由器......我希望不要这样做 您如何在屏幕之间导航? 使用其中一个移动模板并且它正在使用 Stack.Navigator 好的,你还需要清理你的代码 - 将你所有的 lets 更改为 consts。这些变量应该是不可变的。那么,为什么需要这条线? count = lastTimerCount; 是的,我正在测试,但这仍然不能解决我的问题【参考方案2】:

我从这篇文章中找到了一种方法。

https://aboutreact.com/refresh-previous-screen-react-navigation/

【讨论】:

以上是关于如何每次在同一个视图上与 react native expo 倒计时的主要内容,如果未能解决你的问题,请参考以下文章

如何在 react-native 中处理列表视图内的视频视图播放

如何使用 react-native 将图像放在相机视图的顶部

React-native:如何在布局(视图)的背景中设置图像

React Native:如何更改 onPress 事件的视图

如何使用给定的 nativeID 识别目标 c 中的视图(在 react-native 中给出)

react native ant design