react学习笔记之state以及setState的使用


Posted in Javascript onDecember 07, 2017

在react中通过 state 以及 setState() 来控制组件的状态。

state

state 是 react 中用来存储组件数据状态的,可以类比成 vue 中的 data。

1.state的作用

state是React中组件的一个对象.React把用户界面当做是状态机,想象它有不同的状态然后渲染这些状态,可以轻松让用户界面与数据保持一致.

React中,更新组件的state,会导致重新渲染用户界面(不要操作DOM).简单来说,就是用户界面会随着state变化而变化.

2.state工作原理

常用的通知React数据变化的方法是调用setState(data,callback).这个方法会合并data到this.state,并重新渲染组件.渲染完成后,调用可选的

callback回调.大部分情况不需要提供callback,因为React会负责吧界面更新到最新状态.

setState()

与 vue 中不同的是 state 不能直接被修改,需要通过 setState() 的方法去修改。

1、setState() 更新组件状态之后不会立即生效,react 为提高性能会按批次更新 state 然后 render, 即异步操作,所以 setSate() 之后立即去取state的值并不是更新之后的状态。

2、setState() 第一个参数接受两种类型的参数,Object以及Function

Object

this.setState({
 msg: '更新state msg'
})

当参数是Object的时候, 可以即为对应 state 中的 key, value 即是新的值。

Function

当参数是函数的时候, setState() 会将上一个 setState() 的结果作为参数传入这个函数

...
constructor () {
 this.state = { counter: 0 }
}
add() {
 this.setState({ counter: this.state.counter + 1 })
 this.setState({ counter: this.state.counter + 1 }) // 此时`this.state.counter`的值还是初始值0,,所以这个操作是无效的
 this.setState(prevState => { counter: prevState.counter + 1 }) // `prevState.counter` 为上次更新之后的值,即是1
}
...

setState() 第二个参数是一个回调函数,表示 state 更新完成

this.setState({
 msg: '更新state msg'
}, () => {
 console.log('state 更新完毕')
})

根据这个可以使用Promise以及async/await,封装成同步操作

setStateAsync(state) {
 return new Promise(resolve => {
  this.setState(state, resolve)
 })
}
// 使用
async add() {
 await setStateAsync({ counter: this.state.counter + 1 })
 console.log('state 更新完毕')
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JQuery Tab选项卡效果代码改进版
Apr 01 Javascript
jquery 实现input输入什么div图层显示什么
Jun 15 Javascript
js实现索引图片切换效果
Nov 21 Javascript
JS基于递归实现倒计时效果的方法
Nov 26 Javascript
jQuery插件HighCharts绘制2D柱状图、折线图的组合双轴图效果示例【附demo源码下载】
Mar 09 Javascript
ES6学习教程之对象字面量详解
Oct 09 Javascript
关于jQuery里prev()的简单操作代码
Oct 27 jQuery
垃圾回收器的相关知识点总结
May 13 Javascript
Vue项目全局配置页面缓存之按需读取缓存的实现详解
Aug 01 Javascript
详解一个基于套接字实现长连接的express
Mar 28 Javascript
Vue编写可显示周和月模式的日历 Vue自定义日历内容的显示
Jun 26 Javascript
Vue按时间段查询数据组件使用详解
Aug 21 Javascript
React Native 截屏组件的示例代码
Dec 06 #Javascript
判断jQuery是否加载完成,没完成继续判断的解决方法
Dec 06 #jQuery
mui back 返回刷新页面的实例
Dec 06 #Javascript
javascript实现Emrips反质数枚举的示例代码
Dec 06 #Javascript
基于jQuery Ajax实现下拉框无刷新联动
Dec 06 #jQuery
JS实现登录页密码的显示和隐藏功能
Dec 06 #Javascript
微信小程序 scroll-view实现锚点滑动的示例
Dec 06 #Javascript
You might like
thinkPHP学习笔记之安装配置篇
2015/03/05 PHP
php检测文本的编码
2015/07/26 PHP
PHP实现的简单缓存类
2015/07/29 PHP
PHP实现的mongoDB数据库操作类完整实例
2018/04/10 PHP
js实现ASP分页函数 HTML分页函数
2006/09/22 Javascript
javascript中字符串替换函数replace()方法与c# 、vb 替换有一点不同
2010/06/25 Javascript
JS/jQuery实现默认显示部分文字点击按钮显示全部内容
2013/05/13 Javascript
jquery中 $.expr使用实例介绍
2014/06/09 Javascript
JavaScript实现的一个日期格式化函数分享
2014/12/06 Javascript
JS实现浏览器状态栏文字从右向左弹出效果代码
2015/10/27 Javascript
JavaScript实现星星等级评价功能
2017/03/22 Javascript
node.js平台下的mysql数据库配置及连接
2017/03/31 Javascript
详解在Angularjs中ui-sref和$state.go如何传递参数
2017/04/24 Javascript
Express下采用bcryptjs进行密码加密的方法
2018/02/07 Javascript
vue监听input标签的value值方法
2018/08/27 Javascript
Vant的安装和配合引入Vue.js项目里的方法步骤
2018/12/05 Javascript
vue+element+Java实现批量删除功能
2019/04/08 Javascript
jQuery实现轮播图效果
2019/11/26 jQuery
python 删除大文件中的某一行(最有效率的方法)
2017/08/19 Python
Python中的默认参数实例分析
2018/01/29 Python
总结python中pass的作用
2019/02/27 Python
python字符串循环左移
2019/03/08 Python
tensorflow如何继续训练之前保存的模型实例
2020/01/21 Python
PyCharm+PyQt5+QtDesigner配置详解
2020/08/12 Python
UI自动化定位常用实现方法代码示例
2020/10/27 Python
中国跨境海淘网站:考拉海购
2016/08/01 全球购物
彪马土耳其官网:PUMA土耳其
2019/07/14 全球购物
小学音乐教学反思
2014/02/05 职场文书
国窖1573广告词
2014/03/21 职场文书
文员转正自我鉴定怎么写
2014/09/29 职场文书
政风行风评议工作总结
2014/10/21 职场文书
领导班子整改措施
2014/10/24 职场文书
《观潮》教学反思
2016/02/17 职场文书
写一个Python脚本自动爬取Bilibili小视频
2021/04/24 Python
Python爬虫基础讲解之请求
2021/05/13 Python
超越Nginx的Web服务器caddy优雅用法
2022/06/21 Servers