博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
深入理解 React JS 中的 setState
阅读量:6446 次
发布时间:2019-06-23

本文共 1219 字,大约阅读时间需要 4 分钟。

截图

此文主要探讨了 React JS 中的 setState 背后的机制,供深入学习 React 研究之用。

在课程 中,有些同学会发现 React JS 中的 setState 的表现好像有点怪异,和理解中的 state 更新机制不太一样,下面我们就来简单探讨下 setState 背后的机制。

课程中的其他常见小问题请常见 。

1 setState 问题的复现

我们看下面一段简单的代码,代码通过点击一个按钮,改变 state 中的 clicked 值。在修改值后进行 clicked 值的输出,你尝试猜测一下输出的值是什么?

截图

许多同学在自己写代码遇到类似逻辑的时候都会发现,console.log(this.state.clicked); 这段代码输出的不是我们预期的 true,而是 false。

这是为什么呢?

2 setState 的内部机制

遇到问题我们还是去官方文档找线索。

我们看到 state 的章节有下面这段话。

截图

文章链接在这里:。

我们会发现其实 React 的 setState 方法是一个异步的方法,React 会将所有的 setState 方法打包成一次进行更新,类似于快递点寄快递,囤积了一些包裹后一次投递,而不是你每次修改 state 都会进行更新。

这样的设计主要是为了提高 UI 更新的性能,我们知道 React 中 state 的改变会导致 UI 的更新。
如果需要进行同步操作逻辑,那么在回调函数里添加逻辑即可。

{% codeblock lang:js%}

handleClick = () => {

this.setState({
clicked: true
}, () => console.log(this.state.clicked)) //这时候输出的是 true
}

{% endcodeblock %}

3 state 的更新时机

任何 state 的更新都会导致 React 进行重新渲染。props 也会导致 React 进行重新渲染。组件与父组件的更改同样也会引起 React 的重新渲染。

那么我们有没有办法手动控制 React 是否进行渲染呢?
这里,你应该想起来生命周期函数里有一个方法 shouldComponentUpdate
此方法默认每次在需要进行重新渲染时返回 true,但是在这个函数里你可以添加自己的逻辑,控制 React 不进行渲染以及渲染的条件。
那么,同样,我们也可以在此函数中定义那些我们关注的 state ,只有当它们变化才让 React 进行重新渲染,而其他一些不相关的 state 的值即使变化了,我们也可以让 React 不进行渲染。
理解了这些,那么在你进行相关性能优化时就非常有用。

作者:
出处:
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

你可能感兴趣的文章
ngModule中的entryComponents是什么?
查看>>
mint-ui之三级联动
查看>>
Vue 2.5 is coming
查看>>
【ElasticSearch】ElasticSearch安装IK中文分词器
查看>>
部署web项目的过程记录,包括laravel,redis,mongodb,workerman的配置过程
查看>>
你需要了解的一些web前端常见概念整理
查看>>
Spring中的ApplicationContextAware接口的使用
查看>>
(Thinking in Java)第9章 接口
查看>>
Javascript CI篇(1)- Jasmine 基础学习
查看>>
Excel快速批量「同上」填充空单元格
查看>>
leetcode92. Reverse Linked List II
查看>>
学习Promise
查看>>
【调试工具】tcpdump
查看>>
HTML meta 详解
查看>>
利用Jenkins进行iOS持续集成
查看>>
JavaScript实现常见排序算法
查看>>
Rx.js使用之结合node的读写流进行数据处理
查看>>
煦涵说Flow
查看>>
Laravel 路由执行
查看>>
业务上云,去争取更大的胜利!
查看>>