惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Jina AI
Jina AI
博客园 - 【当耐特】
量子位
C
Check Point Blog
博客园 - 叶小钗
博客园 - 聂微东
博客园 - 三生石上(FineUI控件)
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Hugging Face - Blog
Hugging Face - Blog
美团技术团队
The Cloudflare Blog
T
Tailwind CSS Blog
人人都是产品经理
人人都是产品经理
月光博客
月光博客
V
V2EX
Last Week in AI
Last Week in AI
酷 壳 – CoolShell
酷 壳 – CoolShell
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
IT之家
IT之家
大猫的无限游戏
大猫的无限游戏
有赞技术团队
有赞技术团队
Apple Machine Learning Research
Apple Machine Learning Research
S
SegmentFault 最新的问题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - uxinxin

.NET10 中配置Swagger的记录 .NET10中通过appsettings.json配置文件获取信息的几个方法 学习使用Taurus的微服务群在.NET Framework4.8环境下的搭建 .net framework 中Owin 通过启动类 Startup.cs 使用 SignalR B站朝夕教育 【.NET9.0+WPF实战三类流程化业务逻辑控制】学习记录 【八】 B站朝夕教育 【.NET9.0+WPF实战三类流程化业务逻辑控制】学习记录 【七】 B站朝夕教育 【.NET9.0+WPF实战三类流程化业务逻辑控制】学习记录 【六】 B站朝夕教育 【.NET9.0+WPF实战三类流程化业务逻辑控制】学习记录 【五】 B站朝夕教育 【.NET9.0+WPF实战三类流程化业务逻辑控制】学习记录 【四】 B站朝夕教育 【.NET9.0+WPF实战三类流程化业务逻辑控制】学习记录 【三】 B站朝夕教育 【.NET9.0+WPF实战三类流程化业务逻辑控制】学习记录 【二】 B站朝夕教育 【.NET9.0+WPF实战三类流程化业务逻辑控制】学习记录 .NET程序屏蔽一些无效蜘蛛的访问配置 asp.net 动态加载与卸载程序集的尝试(没有成功)欢迎解决的朋友留言告知 Framework 4.6.2下的SignalR使用,以及WPF下同步使用 CYQ.Data的XML操作的一些自己使用记录 IIS URL Rewrite将伪静态配置文件放在web.config外部 ASP.NET Core EF MVC 登录验证 一步步教你用html+div+css+js基于Jquery实现一套数字华容道游戏
react 16.8.4版本中的生命周期中的细节 在组件挂在时使用了定...
uxinxin · 2022-07-06 · via 博客园 - uxinxin

react 16.8.4版本中

如果页面加载时要挂在一个定时器,且里面在修改状态,一定不能写在render里面,需要写到生命周期函数 componentDidMount中,否则会导致循环更新页面状态反复调用render造成死循环

另外定时器的卸载可以统一放在componentWillUnmount里面进行处理,这样代码更合理,思路更清晰

 1         class Life extends React.Component {
 2             state={opacity:1}
 3             death=()=>{
 4                 clearInterval(this.timer)
 5                 ReactDOM.unmountComponentAtNode(document.querySelector('#test'))
 6             }
 7             componentDidMount() {
 8                 this.timer=setInterval(() => {
 9                     let {opacity}=this.state
10                     opacity-=0.1
11                     if(opacity<=0) opacity=1
12                     this.setState({opacity})
13                 }, 200);
14             }
15             render() {
16                 console.log('render')
17                 const {opacity}=this.state
18                 return (
19                     <div>
20                         <h1 style={{opacity:opacity}}>React学不会怎么办</h1>
21                         <button onClick={this.death}>不活了</button>
22                     </div>
23                 )
24             }
25         }
26         ReactDOM.render(<Life />,document.querySelector('#test'))
 1         class Life extends React.Component {
 2             state={opacity:1}
 3             death=()=>{
 4                 ReactDOM.unmountComponentAtNode(document.querySelector('#test'))
 5             }
 6             componentDidMount() {
 7                 this.timer=setInterval(() => {
 8                     let {opacity}=this.state
 9                     opacity-=0.1
10                     if(opacity<=0) opacity=1
11                     this.setState({opacity})
12                 }, 200);
13             }
14             
15             componentWillUnmount(){
16                 clearInterval(this.timer)
17             }
18             render() {
19                 console.log('render')
20                 const {opacity}=this.state
21                 return (
22                     <div>
23                         <h1 style={{opacity:opacity}}>React学不会怎么办</h1>
24                         <button onClick={this.death}>不活了</button>
25                     </div>
26                 )
27             }
28         }
29         ReactDOM.render(<Life />,document.querySelector('#test'))