3、react-props/state
1、react中属性props和状态state
属性--静态得,所以在初始化得时候使用得是static进行初始化得,正常情况下属性不改
状态--动态得,它得值是可以发生改变得,react中的组件更新(重新渲染),都是通过改变状态值从而达到更新或者是重新渲染得效果得
2、状态机
正因为react中的组件更新或渲染需要通过状态改变达到效果,所以我们把react中得组件看成是一个状态机
状态到底是怎么变得:通过用户触发UI行为达到得改变:例如:单击、双击、刷新、滚动
3、状态:
this.state={}
改变状态:this.setState()方法进行改变的
4、什么情况下能改变状态得值:状态生成了就可以改变
在生命周期得哪个钩子函数中可以改变状态得值:只要状态初始化完成了,那么就可以改变,但是一般不会再WillMount和WillUpdate中该
为什么不在WillMount和WillUpdate中改变:
WillMount是实例化之前调用得方法,实例化就是为了返回一个初始得虚拟DOM,因为在constructor得时候状态已经初始化了,render是为了把初始化得这些状态值显示在DOM中
WillUpdate是在生存期会触发得,话句话来说组件在更新的时候会触发生存期中得钩子函数,组件更新也就意味着状态更新,在生存期之前状态已经改了,我们现在触发生存期得钩子函数,就是为了获取改变之后得状态值,所以不会再重新使用willupdate改变状态了
5、react中得state作用域都是当前组件,不会造成状态得污染
6、state工作原理:
实在consturctor中进行初始化得,通过调用setState方法改变得状态值,
第一种用法:setState(data,callback):
data(就是一个对象):用当前data中得状态值替换初始化得状态值,使用第一个参数改变完state组件重新渲染之后,如果需要其他操作得话
callback:组件重新渲染完之后会调用的(这个是可以选加得,如果不需要得话可以不加)
第二种用法:setState(callback1,callback2):
callback1:既能获取到原来得状态值,也能获取到现在得状态值,那么再这个时候就需要return一个对象给setState这个方法
7、实现效果:就是再输入框中输入内容得时候,把当前得内容作为状态值显示再页面中
react中写事件对象和js中事件对象得写法是完全一样的,也同样是在处理函数中写的e
document.getElementById(d1).onclick=function(e){}
8、setState是一个异步得方法
setState是通过队列来实现state得更新得
setState返回一个newState
newState不会立刻执行返回到队列中等待执行
判断是否是批量更新得,如果是得话那么将组件保存到dirtyComponents
如果不是批量更新得话,直接遍历dirtyComponents,调用updateComponent,更新队列中得state
9、setState需要注意:
连续调用了多次setState的话,那么只会引发一次生命周期的更新,因为react中会将所有的setState放到一个队列中等待,再这个等待的过程中不断改变同一个state值得话,那么只会显示最后一次改变得值
当setState({}):多次调用得时候,处理方式:合并更新一次状态,只调用一次render()更新界面---状态更新和页面更新都合并了(批量处理得)
setState(fn(){}):更新多次状态得话,只调用一次render方法更新界面--状态更新没有合并,只有页面更新合并了(不是批量处理得)
10、setState更新状态是同步还是异步?
react相关回调中是异步的(生命周期回调,事件监听回调)
其他异步回调中得是同步得(定时器,原生DOM事件监听,Promise回调)
11、react中得属性:props
对于html来说,它里边得标签基本上都是有属性得,并且这些属性再写得时候有一个特点:
<标签名 属性名=‘值’>
而react组件中得属性和html中标记得属性得写法是完全一样的,换句话来说:
<组件名 属性名=‘值’/>
12、react中得属性来说,创建使用得是static defaultProps进行创建得,属性本身是静态得所以初始化得时候需要加上static,再获取当前属性得话使用得是this.props.属性名进行获取得
13、react中又props和state,那么这两个有区别吗?
初始化上:props:static default初始化得静态得属性
state:使用得是constructor中得this.state进行初始化得
获取:this.props.属性名
this.state.状态名
改变值:props属性一般不会再当前组件中直接修改,没办法修改
state可以再当前组件中进行修改,直接使用得是setState这个方法
用法:state常用于组件得更新,只要是组件更新了那么很大程度上都会是state得状态值发生变化了,组 件可以看成是状态机
props:一般是结合这state一块使用得,常用于得是组件之间得传值
setstate总结
//异步: react事件监听回调中,setState是异步操作得
update1=()=>{ // 单机之后加载
console.log( 'update1更新前:'+this.state.count) ;
this.setState({
count:this.state.count+1
})
console.log( 'update1更新后:'+this.state.count);
} //react生命周期回调中,setState是 异步的
componentDidMount(){ //先加载
console.log('componentDidMount前:'+this.state.count);
this.setState({
count:this.state.count+1
})
console.log( 'componentDidMount后:'+this.state.count); } // 同步一 :定时器
update2=()=>{ // 单机之后加载
setTimeout(()=>{
console.log( 'update1更新前:'+this.state.count) ;
this.setState({
count:this.state.count+1
})
console.log( 'update1更新后:'+this.state.count);
}) }
// 同步一 :promise
update3=()=>{ // 单机之后加载
Promise.resolve().then(()=>{
console.log( 'update1更新前:'+this.state.count) ;
this.setState({
count:this.state.count+1
})
console.log( 'update1更新后:'+this.state.count);
})
}
// 同步 dom事件监听
update4=()=>{ // 单机之后加载
var h=document.getElementById("p")
h.onclick=()=>{
console.log( 'update1更新前:'+this.state.count) ;
this.setState({
count:this.state.count+1
})
console.log( 'update1更新后:'+this.state.count); } }
3、react-props/state的更多相关文章
- 【React自制全家桶】四、React中state与props的分析与比较
一.state 1.state的作用 state是React中组件的一个对象.React把用户界面当做是状态机,想象它有不同的状态然后渲染这些状态,可以轻松让用户界面与数据保持一致. React中,更 ...
- 九、React中的组件、父子组件、React props父组件给子组件传值、子组件给父组件传值、父组件中通过refs获取子组件属性和方法
一.概述 React中的组件: 解决html 标签构建应用的不足. 使用组件的好处:把公共的功能单独抽离成一个文件作为一个组件,哪里里使用哪里引入. [父子组件]:组件的相互调用中,我们把调用者称为父 ...
- react初探(一)之JSX、状态(state)管理、条件渲染、事件处理
前言: 最近收到组长通知我们项目组后面新开的项目准备统一技术栈为react,目前我的情况是三大框架只会angular和Vue.在实际项目中只使用过一次angular5,其余项目都是使用Vue写的.写篇 ...
- react 中state与props
react 中state与props 1.state与props props是只读属性,只有在组件被实例化的时候可以赋值,之后的任何时候都无法改变该值.如果试图修改该值时,控制台会报错 only re ...
- 8. react 基础 - props 默认值和类型限制 与 Props , State , render 函数 关系
一. PropTypes 与 DefaultProps 官方文档 1. PropTypes 属性校验 引入 PropTypes import PropTypes from 'prop-types'; ...
- React & update state with props & Object.assign
React & update state with props & Object.assign Object.assign({}, oldObj, newObj) https://re ...
- 22.2、react生命周期与react脚手架(二)
一.类:es6 <script type="text/babel"> class Person{ age = 10; constructor(name){ this.n ...
- React.createClass 、React.createElement、Component
react里面有几个需要区别开的函数 React.createClass .React.createElement.Component 首选看一下在浏览器的下面写法: <div id=" ...
- React、React Native面试题
1.React Native相对于原生的ios和Android有哪些优势. react native一套代码可以开发出跨平台app, 减少了人力.节省了时间.避免了 iOS 与 Android 版本发 ...
- React给state赋值的两种写法
如果你看过React的官方文档,就会对怎么给局部state赋值有一定的了解.如下代码: class Test extends React.Component { constructor(props) ...
随机推荐
- 微信小程序通信录
第一步:phone.wxml中 <view bindlongtap="clickPhone">{{phoneNum}}</view> 第二步:phone.j ...
- day03: copy的总结(20170215)
import copynames = ["88xiaoming","liuhai","杨东","liuhai",&quo ...
- C:习题2
C 语言中的数据类型主要有哪些? C 语言为什么要规定对所有用到的变量“先定义后使用”?这样做有什么好处? 1. 编译系统会根据定义为变量分配内存空间,分配空间的大小与数据类型有关 2. 系统可以根据 ...
- flatbuffer介绍和用法
介绍 flatbuffer是google发布的一个跨平台序列化框架具有如下特点 1.对序列化的数据不需要打包和拆包 2.内存和效率速度高,扩展灵活 3.代码依赖较少 4.强类型设计,编译期即可完成类型 ...
- LNMP PHP升级脚本
升级PHP前,请确认你的网站程序是否支持升级到的PHP版本,防止升级到网站程序不兼容的PHP版本,具体可以去你使用的PHP程序的官网查询相关版本支持信息.v1.3及以后版本大部分情况下也可以进行降级操 ...
- .Net Core实现区块链初探
区块链这么火,咱也跟个风. 一.前言 最近,银行总行关于数字货币即将推出的消息频传,把BTC也带得来了一波反弹. 借着这个风,我们也研究一下区块链. 通常大家说到区块链,实际包括两部分概念: ...
- 用非常硬核的JAVA序列化手段实现对象流的持久化保存
目录 背景 对象流的概念 对象流实例 引入一张组织结构图 定义组织架构图的类 类的完整结构 用对象流保存组织架构的对象信息 核心代码 用对象流读取文件并输出 核心代码 总结 背景 在OOP(面向对象编 ...
- Spring_AOP_AspectJ支持的通知注解
1.AOP前奏: 使用动态代理解决日志需求 ArithmeticCalculator.java package com.aff.spring.aop.helloworld; public interf ...
- Alpha冲刺 —— 5.8
这个作业属于哪个课程 软件工程 这个作业要求在哪里 团队作业第五次--Alpha冲刺 这个作业的目标 Alpha冲刺 作业正文 正文 github链接 项目地址 其他参考文献 无 一.会议内容 1.展 ...
- Rocket - tilelink - SRAM
https://mp.weixin.qq.com/s/-z9n6SHyAiK2OE7mOSvC2Q 简单介绍SRAM的实现. 1. 基本介绍 实现一个支持读写的静态存储器.存取的 ...