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 开发中规范性的一点感想
Jun 23 Javascript
XHTML下,JS浮动代码失效的问题
Nov 12 Javascript
javascript Object与Function使用
Jan 11 Javascript
JS多物体 任意值 链式 缓冲运动
Aug 10 Javascript
基于JQuery打造无缝滚动新闻步骤详解
Mar 31 Javascript
jQuery实现的导航动画效果(附demo源码)
Apr 01 Javascript
浅谈js中几种实用的跨域方法原理详解
Dec 02 Javascript
Angular 2父子组件数据传递之@Input和@Output详解 (上)
Jul 05 Javascript
解决layui 复选框等内置控件不显示的问题
Aug 14 Javascript
Vue.js中 v-model 指令的修饰符详解
Dec 03 Javascript
vue+element实现表格新增、编辑、删除功能
May 28 Javascript
解决mui框架中switch开关通过js控制开或者关状态时小圆点不动的问题
Sep 03 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
大师制作的中短波矿石收音机
2020/04/02 无线电
PHP异步调用socket实现代码
2012/01/12 PHP
WordPress中制作导航菜单的PHP核心方法讲解
2015/12/11 PHP
JavaScript 获取用户客户端操作系统版本
2009/08/25 Javascript
jQuery源码分析-04 选择器-Sizzle-工作原理分析
2011/11/14 Javascript
非html5实现js版弹球游戏示例代码
2013/09/22 Javascript
jquery插件开发之实现jquery手风琴功能分享
2014/03/10 Javascript
jquery获取select选中值的方法分析
2015/12/22 Javascript
JavaScript是如何实现继承的(六种方式)
2016/03/31 Javascript
JS简单实现无缝滚动效果实例
2016/08/24 Javascript
基于Javascript实现的不重复ID的生成器
2016/12/25 Javascript
基于JS实现翻书效果的页面切换样式
2017/02/16 Javascript
关于JS与jQuery中的文档加载问题
2017/08/22 jQuery
Vue2.0用户权限控制解决方案的示例
2018/02/10 Javascript
详解auto-vue-file:一个自动创建vue组件的包
2019/04/26 Javascript
微信小程序动态添加view组件的实例代码
2019/05/23 Javascript
Vue路由模块化配置的完整步骤
2019/08/14 Javascript
nodejs一个简单的文件服务器的创建方法
2019/09/13 NodeJs
解决vue scoped html样式无效的问题
2020/10/24 Javascript
python聊天程序实例代码分享
2013/11/18 Python
ubuntu安装sublime3并配置python3环境的方法
2018/03/15 Python
Python学习小技巧总结
2018/06/10 Python
通过python改变图片特定区域的颜色详解
2019/07/15 Python
pytorch 实现打印模型的参数值
2019/12/30 Python
pytorch AvgPool2d函数使用详解
2020/01/03 Python
python列表推导和生成器表达式知识点总结
2020/01/10 Python
Keras Convolution1D与Convolution2D区别说明
2020/05/22 Python
Kendra Scott官网:美国领先的时尚配饰品牌
2020/10/22 全球购物
店长职务说明书
2014/02/04 职场文书
护士岗前培训自我评鉴
2014/02/28 职场文书
营销总经理岗位职责范本
2014/09/02 职场文书
学校领导班子群众路线整改措施
2014/09/16 职场文书
债务纠纷起诉书
2015/05/20 职场文书
唐山大地震的观后感
2015/06/05 职场文书
变长双向rnn的正确使用姿势教学
2021/05/31 Python
zabbix自定义监控nginx状态实现过程
2021/11/01 Servers