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) ...
随机推荐
- 流复制-pg_basebackup (有自定义表空间)
一.组成部分 1.walsender进程是用来发送WAL日志记录的 2.walreceiver进程是用来接收WAL日志记录的 3.startup进程是用来apply日志的 二.主库配置 1.授权账号, ...
- Vue 使用typescript, 优雅的调用swagger API
Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务,后端集成下Swagger,然后就可以提供一个在线文档地址给前端同学. 前端如何优雅的调用呢? ...
- 201771010117—马兴德—实验一 软件工程准备—掌握博客中MarkDown的使用以及通读《现代软件工程—构建之法》的总结
实验一 软件工程的前期准备工作 在前期的准备工作以及老师上课的讲解中,我懂得了"软件=程序+软件工程"这句话的基本含义,以前只是对软件工程有一个很浅显的概念,现在在读了<现代 ...
- UVA11038
题目大意:见刘汝佳<算法竞赛入门经典——训练指南>P173 解题思路: 求出 0 到 m-1 这些数字中 0 出现的次数(此处要特判 m = 0 的情况),再求出 0 到 n 这些数字中 ...
- 【漫画】ES原理 必知必会的倒排索引和分词
倒排索引的初衷 倒排索引,它也是索引.索引,初衷都是为了快速检索到你要的数据. 我相信你一定知道mysql的索引,如果对某一个字段加了索引,一般来说查询该字段速度是可以有显著的提升. 每种数据库都有自 ...
- 母牛的故事(hdu2018)——笔记待完善
思考:这道题考验的是罗辑思维,这个网址http://blog.csdn.net/sxhelijian/article/details/42609353的罗辑思维值得学习 #include<std ...
- SQL——MySQL数据类型
Text类型: Number类型: Date类型:
- Java——日期获取和日期格式化
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; impor ...
- DevOps知识点——3C知多少
CI / CD是任何DevOps操作的两大基石,这是一种开发软件的方式,旨在生产快速而强大的软件,随时以可持续的方式发布更新. 当例行更改代码时,开发周期会更加频繁.更有意义且更快速.通过此过程,我们 ...
- [PHP学习教程 - 类库]002.FTP操作(FTP)
引言:FTP是大家上传至站点服务器必须要使用的协议.现在常用的FTP客户端工具也很多,如:8uftp,FlashFXP,....但是使用客户端工具就无法真正与自动化联系起来.所以今天,我们为大家讲一下 ...