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 相关文章推荐
javascript(jquery)利用函数修改全局变量的代码
Nov 02 Javascript
jQuery.extend 函数及用法详细
Sep 06 Javascript
在AngularJS框架中处理数据建模的方式解析
Mar 05 Javascript
jquery的ajax提交form表单的两种方法小结(推荐)
May 25 Javascript
详解Angular的内置过滤器和自定义过滤器【推荐】
Dec 26 Javascript
Bootstrap风格的zTree右键菜单
Feb 17 Javascript
解决AngualrJS页面刷新导致异常显示问题
Apr 20 Javascript
jquery处理checkbox(复选框)是否被选中实例代码
Jun 12 jQuery
js学习总结_选项卡封装(实例讲解)
Jul 13 Javascript
解决vue的过渡动画无法正常实现问题
Oct 31 Javascript
jQuery实现中奖播报功能(让文本滚动起来) 简单设置数值即可
Mar 20 jQuery
基于javascript的无缝滚动动画1
Aug 07 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
PHP实现仿Google分页效果的分页函数
2015/07/29 PHP
js表数据排序 sort table data
2009/02/18 Javascript
基于jquery的让textarea自适应高度的插件
2010/08/03 Javascript
js获取窗口相对于屏幕左边和上边的位置坐标
2014/05/15 Javascript
jQuery插件datepicker 日期连续选择
2015/06/12 Javascript
JavaScript中使用Math.floor()方法对数字取整
2015/06/15 Javascript
iscroll.js的上拉下拉刷新时无法回弹的解决方法
2016/02/18 Javascript
JavaScript编写Chrome扩展实现与浏览器的交互及时间通知
2016/05/16 Javascript
jQuery实现的兼容性浮动层示例
2016/08/02 Javascript
js 判断各种数据类型的简单方法(推荐)
2016/08/29 Javascript
基于JS实现类似支付宝支付密码输入框
2016/09/02 Javascript
使用cropper.js裁剪头像的实例代码
2017/09/29 Javascript
详解js类型判断
2018/05/22 Javascript
Vue.js 2.x之组件的定义和注册图文详解
2018/06/19 Javascript
vue实现word,pdf文件的导出功能
2018/07/31 Javascript
Vue resource三种请求格式和万能测试地址
2018/09/26 Javascript
JavaScript ES6箭头函数使用指南
2018/12/30 Javascript
JavaScript如何借用构造函数继承
2019/11/06 Javascript
python 实现将字典dict、列表list中的中文正常显示方法
2018/07/06 Python
python 解压pkl文件的方法
2018/10/25 Python
在Python中pandas.DataFrame重置索引名称的实例
2018/11/06 Python
python输入多行字符串的方法总结
2019/07/02 Python
Python如何实现转换URL详解
2019/07/02 Python
python根据完整路径获得盘名/路径名/文件名/文件扩展名的方法
2020/04/22 Python
世界顶级足球门票网站:Live Football Tickets
2017/10/14 全球购物
单身旅行者的单身假期:Just You
2018/04/08 全球购物
英国时尚高尔夫服装购物网站:Trendy Golf
2020/01/10 全球购物
什么叫应用程序域?什么是受管制的代码?什么是强类型系统?什么是装箱和拆箱?
2016/08/13 面试题
会计自荐信范文
2014/03/09 职场文书
仓库管理计划书
2014/05/04 职场文书
我有一个梦想演讲稿
2014/05/05 职场文书
办公室主任岗位承诺书
2014/05/29 职场文书
党员四风问题对照检查材料思想汇报
2014/09/16 职场文书
教师四风自我剖析材料
2014/09/30 职场文书
博士导师推荐信
2015/03/25 职场文书
用JS实现飞机大战小游戏
2021/06/09 Javascript