React学习笔记-03 state
每一个组件都有状态,比如一个开关,开 和 关,都是一种state.那么react是怎么管理它的state的?
React 把用户界面当做状态机,可以轻松的让用户界面和数据保持一致。用户只需要更新组件的state就可以重新渲染用户界面,不用操作DOM。
state:
1.可以通过getInitialState方法初始化state
getInitialState:function(){
return {
open :true
}
}
2.通过setState("open",false)去改变state状态,然后重新渲染页面。那有人会说,为啥一定要用setState,不能通过this.state.open = false去改变状态吗?这两种有啥区别呢?
使用setState去改变状态时,React会主动去渲染VDOM结构,但是使用this.state.open去设置,不会主动去渲染VDOM,需要手动去调用forceUpdate()去强制更新。
state应该保存什么?
state不要保存props的计算值,也不要保存render(0不使用的状态。
eg:
class Component extends React.Component{
constructor(props){
super(props);
this.state = {message:props.message}
},
render:function(){
return (<div>{this.state.message}</div>);
}
}
在这个例子中,state只在第一次创建组件的时候才被赋值,当props变化后,state值不会变,因此界面不会更新。因此不得不在componentWillReceiveProps()中更新state,,导致真实的数据源重复
正确实现:
class Component extends React.Component{
constructor(props){
super(props);
},
render:function(){
return (<div>{this.props.message}</div>);
}
}
//不要在state中存储props的计算值
eg:
class Component extends React.Component{
constructor(props){
super(props);
this.state = {
fullname:'${props.name}${props.lastName}'
};
},
render:function(){
return (<div>{this.state.fullname}</div>);
}
}
更好的实现:
class Component extends React.Component{
constructor(props){
super(props);
},
render:function(){
const {name,funllname}=this.props;
return (<div>{'${name}${fullname}'}</div>);
}
}
目前还没有学习redux,对state的理解还不够深入,先写点吧。。。。后续更新
React学习笔记-03 state的更多相关文章
- React学习笔记(五)State&声明周期
React学习笔记(五) 四.State&声明周期 可以为组件添加"状态(state)".状态与属性相似,但是状态是私有的,完全受控于当前组件. 局部状态就是只能用于类(定 ...
- react学习笔记1--基础知识
什么是react A JAVASCRIPT LIBRARY FOR BUILDING USER INTERFACES[React是一个用于构建用户界面的JavaScript库.] React之所以快, ...
- React学习笔记(一)- 入门笔记
React入门指南 作者:狐狸家的鱼 本文链接:React学习笔记 GitHub:sueRimn 1.组件内部状态state的修改 修改组件的每个状态,组件的render()方法都会再次运行.这样就可 ...
- React学习笔记(七)条件渲染
React学习笔记(七) 六.条件渲染 使用if或条件运算符来创建表示当前状态的元素. 可以使用变量来存储元素.比如: let button = null; if (isLoggedIn) { but ...
- React学习笔记(六)事件处理
React学习笔记(六) 五.事件处理 React事件绑定属性的命名采用驼峰写法,不同于传统DOM全部小写. 如果采用JSX的语法,事件函数需要用大括号{}包裹函数名,不同于传统DOM字符串小括号的方 ...
- React学习笔记 - JSX简介
React Learn Note 2 React学习笔记(二) 标签(空格分隔): React JavaScript 一.JSX简介 像const element = <h1>Hello ...
- React学习笔记 - Hello World
React Learn Note 1 React学习笔记(一) 标签(空格分隔): React JavaScript 前.Hello World 1. 创建单页面应用 使用Create React A ...
- 【React】react学习笔记02-面向组件编程
react学习笔记02-面向组件编程 面向组件编程,直白来说,就是定义组件,使用组件. 以下内容则简单介绍下组建的声明与使用,直接复制demo观测结果即可. 步骤: 1.定义组件 a.轻量组件-函 ...
- React学习笔记--程序调试
React学习笔记 二 程序调试 前面我们搭建好了React的基本开发环境,可以编写基本的React js程序了.但完成的开发环境肯定包含调试器,怎么调试用React编写的JS程序呢?有浏览器,比 ...
随机推荐
- CI持续集成
CI持续集成 “我的TDD实践”系列之CI持续集成 写在前面: 我的TDD实践这几篇文章主要是围绕测试驱动开发所展开的,其中涵盖了一小部分测试理论,更多的则是关注工具的使用及环境的搭建,做到简单实践先 ...
- Android中ListView下拉刷新的实现
ListView中的下拉刷新是非常常见的,也是经常使用的,看到有很多同学想要,那我就整理一下,供大家参考.那我就不解释,直接上代码了. 这里需要自己重写一下ListView,重写代码如下: packa ...
- BootStrap的菜单的快速创建
在bootstrap的3.0版本及以上时,菜单的创建有所改变. 现在,我们只需记住3个类 dropdown open dropdown-menu. 前两个是为ul 列表的父元素用的,最后一个是给ul ...
- python爬虫-知乎登录
#!/usr/bin/env python3 # -*- coding: utf-8 -*- ''' Required - requests (必须) - pillow (可选) ''' import ...
- jmeter测试dubbo接口
本文讲解jmeter测试dubbo接口的实现方式,文章以一个dubbo的接口为例子进行讲解,该dubbo接口实现的功能为: 一:首先我们看服务端代码 代码架构为: 1:新建一个maven工程,pom文 ...
- CodeForces 718C Sasha and Array
线段树. 线段树维护区间矩阵和,操作都是最简单的线段树.$lazy$标记不要记录乘了几次,直接记录乘了几次之后的矩阵就可以了,不然每次下传的时候再算一遍时间复杂度会提高. #pragma commen ...
- [HMLY]10.深入研究Block用weakSelf、strongSelf、@weakify、@strongify解决循环引用
前言 在上篇中,仔细分析了一下Block的实现原理以及__block捕获外部变量的原理.然而实际使用Block过程中,还是会遇到一些问题,比如Retain Circle的问题. 目录 1.Retain ...
- npoi导入--从varchar数据类型到datetime数据类型转换产生一个超出范围的值问题
一,导入问题如图: 二,解决方法和原因: 1,经过调试发现导入获取到的日期数据被装换成1/1/10 0:00,如下图: 而将以上的数据插入数据库类型为datatime的列时会报错 2,经过去了解npo ...
- C语言:XML学习
说明:文章中代码是我参考别人的例子得来的. XML基础 一.XML的概念 Xml是一种可扩展标记语言.在电子计算机中,标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种的信息比如 ...
- Android进程回收的一些知识
关于OOM_ADJ说明: Android 进程易被杀死的情形: 参考:Android进程保活招式大全