我想在react-native中加载一个屏幕时从3倒计时到1。我尝试使用setTimeOut这样做,但它不起作用。我在这里做错了什么?我如何实现这一点?当屏幕加载时,我想以1秒的间隔显示3 =-〉2 ==〉1。以下是我的代码。
constructor(props) {
super(props);
this.state = {
timer: 3
}
}
// componentDidMount
componentDidMount() {
setTimeout(() => {
this.setState({
timer: --this.state.timer
})
}, 1000);
}
7条答案
按热度按时间ercv8c1e1#
在您的代码中,setTimeout在componentDidMount中调用,ComponetDidMount将在整个组件生命周期中调用一次。因此,setTimeout中的函数将仅调用一次。即,在第一次渲染之后,但在连续渲染时,将不会调用componentDidMount。
问题的解决方案可以是:
1.类组件
'setInterval' vs 'setTimeout'
Advantage of using a function in
setState
instead of an objectmemory leak because of setInterval:如果在调用clearInterval之前卸载组件,则会出现内存泄漏,因为启动时设置了间隔,但计时器未停止。React提供componentWillUnmount生命周期方法,以便在卸载或删除组件时清除任何需要清除的内容。
2.功能组件
useRef返回一个可变的ref对象,其.current属性被初始化为传递的参数(initialValue)。返回的对象将在组件的整个生存期内持续存在。因此,在组件重新呈现时,对象引用将相同。
@TheEhsanSarshar和@Rishabh Jain给出的答案也是可行的。我展示了一个与其他人略有不同的解决方案。
ncgqoxb02#
使用react-native中的*setInterval*将挂钩(使用useEffect)版本更新为倒计时:
使用状态变量 timerCount 作为:
<Text>{timerCount}</Text>
gab6jxml3#
iecba09b4#
钩子版本
xurqigkl5#
如果有人想在按下按钮时再次启动计时器,这将是react-hooks中的代码:
在本例中,我使用了30秒的计时器
wlp8pajw6#
下面是一个示例,说明如何创建倒计时计时器,以便倒计时到特定的UTC日期:
u5i3ibmn7#
电源代码希望这样的方式是容易的