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总结

  1. //异步: react事件监听回调中,setState是异步操作得
  2. update1=()=>{ // 单机之后加载
  3. console.log( 'update1更新前:'+this.state.count) ;
  4. this.setState({
  5. count:this.state.count+1
  6. })
  7. console.log( 'update1更新后:'+this.state.count);
  8. }
  9.  
  10. //react生命周期回调中,setState是 异步的
  11. componentDidMount(){ //先加载
  12. console.log('componentDidMount前:'+this.state.count);
  13. this.setState({
  14. count:this.state.count+1
  15. })
  16. console.log( 'componentDidMount后:'+this.state.count);
  17.  
  18. }
  19.  
  20. // 同步一 :定时器
  21. update2=()=>{ // 单机之后加载
  22. setTimeout(()=>{
  23. console.log( 'update1更新前:'+this.state.count) ;
  24. this.setState({
  25. count:this.state.count+1
  26. })
  27. console.log( 'update1更新后:'+this.state.count);
  28. })
  29.  
  30. }
  31. // 同步一 :promise
  32. update3=()=>{ // 单机之后加载
  33. Promise.resolve().then(()=>{
  34. console.log( 'update1更新前:'+this.state.count) ;
  35. this.setState({
  36. count:this.state.count+1
  37. })
  38. console.log( 'update1更新后:'+this.state.count);
  39. })
  40. }
  41. // 同步 dom事件监听
  42. update4=()=>{ // 单机之后加载
  43. var h=document.getElementById("p")
  44. h.onclick=()=>{
  45. console.log( 'update1更新前:'+this.state.count) ;
  46. this.setState({
  47. count:this.state.count+1
  48. })
  49. console.log( 'update1更新后:'+this.state.count);
  50.  
  51. }
  52.  
  53. }

3、react-props/state的更多相关文章

  1. 【React自制全家桶】四、React中state与props的分析与比较

    一.state 1.state的作用 state是React中组件的一个对象.React把用户界面当做是状态机,想象它有不同的状态然后渲染这些状态,可以轻松让用户界面与数据保持一致. React中,更 ...

  2. 九、React中的组件、父子组件、React props父组件给子组件传值、子组件给父组件传值、父组件中通过refs获取子组件属性和方法

    一.概述 React中的组件: 解决html 标签构建应用的不足. 使用组件的好处:把公共的功能单独抽离成一个文件作为一个组件,哪里里使用哪里引入. [父子组件]:组件的相互调用中,我们把调用者称为父 ...

  3. react初探(一)之JSX、状态(state)管理、条件渲染、事件处理

    前言: 最近收到组长通知我们项目组后面新开的项目准备统一技术栈为react,目前我的情况是三大框架只会angular和Vue.在实际项目中只使用过一次angular5,其余项目都是使用Vue写的.写篇 ...

  4. react 中state与props

    react 中state与props 1.state与props props是只读属性,只有在组件被实例化的时候可以赋值,之后的任何时候都无法改变该值.如果试图修改该值时,控制台会报错 only re ...

  5. 8. react 基础 - props 默认值和类型限制 与 Props , State , render 函数 关系

    一. PropTypes 与 DefaultProps 官方文档 1. PropTypes 属性校验 引入 PropTypes import PropTypes from 'prop-types'; ...

  6. React & update state with props & Object.assign

    React & update state with props & Object.assign Object.assign({}, oldObj, newObj) https://re ...

  7. 22.2、react生命周期与react脚手架(二)

    一.类:es6 <script type="text/babel"> class Person{ age = 10; constructor(name){ this.n ...

  8. React.createClass 、React.createElement、Component

    react里面有几个需要区别开的函数 React.createClass .React.createElement.Component 首选看一下在浏览器的下面写法: <div id=" ...

  9. React、React Native面试题

    1.React Native相对于原生的ios和Android有哪些优势. react native一套代码可以开发出跨平台app, 减少了人力.节省了时间.避免了 iOS 与 Android 版本发 ...

  10. React给state赋值的两种写法

    如果你看过React的官方文档,就会对怎么给局部state赋值有一定的了解.如下代码: class Test extends React.Component { constructor(props) ...

随机推荐

  1. 【python----发轫之始】【基础知识总结】

    python基础知识总结 一.自学感受 学完之后,,,感觉脑子里全是乱的,单词这么多,都要分不清什么时候该用什么,他到底属于哪一个数据类型里的函数,,,,,, 所以,我想着把笔记整理一下,方便自己和需 ...

  2. Python 如何随机打乱列表(List)排序

    场景: 现在有一个list:[1,2,3,4,5,6],我需要把这个list在输出的时候,是以一种随机打乱的形式输出. 专业点的术语:将一个容器中的数据每次随机逐个遍历一遍. 注意:不是生成一个随机的 ...

  3. mouseover与mouseenter区别

    学习笔记. mouseover:在鼠标移入元素本身或者子元素时都会触发事件,相当于有一个冒泡过程.而且在鼠标移入子元素中时,父元素会显示离开的状态:相应的,当鼠标从子元素移入父元素,子元素也会显示离开 ...

  4. 自定义reaml创建使用实现认证

    注意清空shiro.ini 创建User对象 package cn.zys.Bean; public class User { private Integer id; private String u ...

  5. PHP SQL预处理

    php预处理查询 $query='insert into p1(info) values(?)'; $query2='select info from p1 where id=?'; $country ...

  6. Java线程的启动与中止

    一.线程与进程的关系 关于进程与线程,百度百科上是这样描述的: 进程(Process) 是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础. 在当 ...

  7. linux连个文件都删除不了,什么鬼!

    前言 最近不是redis 6.0 出了吗,官网介绍最新稳定版本是 6.0.3 .于是,我就准备在自己的破小服务器上安装一下.于是,出现了后续的糟心事 (linux 下的文件正常删除不了). 下载了最新 ...

  8. PreparedStatement实现针对不同表的通用查询操作

    PreparedStatement实现针对不同表的通用查询操作:查询一样和多行 PreparedStatementQueryTest package com.aff.PreparedStatement ...

  9. 最小生成树——Kruskal算法理解

    背景:本文是在小甲鱼数据结构教学视频中的代码的基础上,添加详细注释而完成的.该段代码并不完整,仅摘录了核心算法部分,结合自己的思考,谈谈理解. Prim算法理解: 如图(摘录自小甲鱼教学视频中的图片) ...

  10. 03 . 前端之JavaScipt

    JavaScript概述 ECMAScript和JavaScript的关系 1996年11月,JavaScript的创造者–Netscape公司,决定将JavaScript提交给国际标准化组织ECMA ...