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) ...
随机推荐
- JSONObject转换为map
http://cloudyxuq.iteye.com/blog/1618213 private static HashMap<String, String> toHashMap(Objec ...
- 一言难尽,Jpa这个功能差点让我丢了工作
故事背景 前阵子,有位朋友在微信上问我数据被删了能不能恢复,我问了下原因,居然是因为一个配置项惹的祸. 故事细节 在 Spring Boot 中使用 jpa 来操作数据库,jpa 就不做详细的介绍了, ...
- 使用element-ui 的table 组件 出现表格线条不对齐的问题
在全局css样式中添加以下代码即可: body .el-table th.gutter { display: table-cell !important }
- Java——动态生成POJO类
package com.java.test.dynamicpojo; import java.io.ByteArrayOutputStream; import java.io.IOException; ...
- [SD心灵鸡汤]000.每月一则 - 索引
[SD心灵鸡汤]001.每月一则 - 2015.05 [SD心灵鸡汤]002.每月一则 - 2015.06 [SD心灵鸡汤]003.每月一则 - 2015.07 [SD心灵鸡汤]004.每月一则 - ...
- [FlashDevelop] 001.FlashDevelop + LayaFlash环境搭建
产品简介: 唯一使用Flash直接开发或转换大型HTML5游戏的全套解决方案. 开发工具 FlashDevelop + JDK + flashplayer_18_sa_debug + LayaFlas ...
- RxJS 中的创建操作符
RxJs 中创建操作符是创建数据流的起点,这些操作符可以凭空创建一个流或者是根据其它数据形式创建一个流. Observable的构造函数可以直接创建一个数据流,比如: const $source=ne ...
- Hadoop Yarn REST API未授权漏洞利用
Hadoop Yarn REST API未授权漏洞利用 Hadoop是一个由Apache基金会所开发的分布式系统基础架构,YARN是hadoop系统上的资源统一管理平台,其主要作用是实现集群资源的统一 ...
- 空格与false
- 分布式事务专题笔记(一) 基础概念 与 CAP 理论
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 一.基础概念 1.什么是事务 什么是事务?举个生活中的例子:你去小卖铺买东西,“一手交钱,一手交货”就是 ...