React倒计时功能实现代码——解耦通用
网络编程 2021-07-04 14:06www.168986.cn编程入门
这篇文章主要介绍了React倒计时功能实现——解耦通用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
需求分析
需求
在某个页面中需要有一个倒计时的功能,倒计时 5 s,5s钟后跳转到新的界面
分析
- 是实现倒计时功能
- 是实现在每倒计时 1 s后页面上要执行 倒计时秒数变化的功能
- 是实现倒计时完成后 跳转到指定页面的功能
初版做法
代码
let waitTime = 5 class DemoPage extends React.Component { constructor(props) { super(props); this.state = { time: '', }; } ponentDidMount = () => { this.countDown(); }; countDown = () => { if (waitTime > 0) { waitTime--; this.setState({ time:waitTime }) } else { history.push('/Login') return; } setTimeout(() => { this.countDown(); }, 1000); } render() { todoInfo = this.state.time + '秒后跳转至登录界面'; return ( <div> todoInfo </div> ); } } export default DemoPage;
问题分析
时间设置为全局变量,糟糕的做法,
- 修改不方便
- 难于阅读和理解
- 全局变量的值极不安全,可能被任何程序修改
改进版
代码
class DemoPage extends React.Component { constructor(props) { super(props); this.state = { time: '', }; } ponentDidMount = () => { this.countDown(5);//倒计时时间可随意调整,且可读性强 }; countDown = (waitTime) => { if (waitTime > 0) { waitTime--; this.setState({ time:waitTime }) } else { history.push('/Login') return; } setTimeout(() => { this.countDown(waitTime); }, 1000); } render() { todoInfo = this.state.time + '秒后跳转至登录界面'; return ( <div> todoInfo </div> ); } } export default DemoPage;
改进后将时间作为参数放到countDown里面,方便随意设置倒计时时间
进一步分析问题
上面的做法,
- setState的操作只能写在本组件,与本组件紧耦合在一起,无法实现多组件复用
- history.push('/Login') 只能用在umi 框架中,与框架紧耦合在一起,无法实现普适应用
进一步改进
针对本问题的需求,可以将业务场景扩大为
- 倒计时功能
- 倒计时过程中 需要做某事
doSomethingDuringCountDown()
- 倒计时结束后 需要做某事
doSomethingAfterCountDown()
这样的话,倒计时的功能就可以使用的更加的灵活了。
方案
将函数作为参数传递到countDown()方法中
将 doSomethingDuringCountDown()
和 doSomethingAfterCountDown()
作为参数传递到countDown方法中,
具体的方法实现,根据自己页面的需求来实现。
代码
//utils.js export countDown = (waitTime,doSomethingDuringCountDown,doSomethingAfterCountDown){ if (waitTime > 0) { waitTime--; if(doSomethingDuringCountDown){ doSomethingDuringCountDown() } } else { if(doSomethingAfterCountDown){ doSomethingAfterCountDown() } return; } setTimeout(() => { countDown(waitTime,doSomethingDuringCountDown,doSomethingAfterCountDown); }, 1000); }
实例
//DemoPage.jsx import { countDown } from 'utils.js' class DemoPage extends React.Component { constructor(props) { super(props); this.state = { time: '', }; } ponentDidMount = () => { countDown(5,this.waitTimeStateChange,this.linkTo); } waitTimeStateChange = (time) => { this.setState({ time: time, }) } linkTo = () => { history.push(ToBeReviewedShowData.linkUrl) } render() { todoInfo = this.state.time + '秒后跳转至登录界面' return ( <div> todoInfo </div> ) } } export default DemoPage
到此这篇关于React倒计时功能实现——解耦通用的文章就介绍到这了,更多相关React倒计时内容请搜索狼蚁SEO以前的文章或继续浏览狼蚁网站SEO优化的相关文章希望大家以后多多支持狼蚁SEO!
编程语言
- 宿迁百度关键词排名指南:实现精准营销的关键
- 四川SEO优化怎么做网络推广
- 立昂技术备案老域名收购:如何为您的业务赋能
- 安徽百度关键词seo贵不贵,一般需要多少钱
- 吉林百度快照排名怎么做电话营销
- 多伦新手做SEO怎么做
- 甘肃优化关键词排名推广怎么做论坛营销
- 沙雅SEO网站推广:提升您的在线可见性
- 四川SEO优化如何提升销售额和销售量
- 聂荣网站排名优化:提升网站可见性的全方位指
- 涞水SEO:提升地方企业在线可见性的策略
- 辽宁百度seo排名怎样做网站排名
- 临湘哪有关键词排名优化:提升网站可见度的关
- 黑龙江百度网站优化有没有优惠
- 凉城优化关键词排名推广:提升您的网络可见性
- 萝北整站优化:提升您网站流量和排名的全面指