小鸡啄米之React状态机

react 组件传值 状态机/state 组件 本质 自定义标签 组件的特点优势 强内聚 弱耦合 提高了代码的复用性 降低了测试难度 代码的复杂度也大大降低 组件的分类 在react中有两种组件的写法 函数组件--无状态组件 语法: function 函数名(组件名 但是名字首字母必须必须必须必须 必须 大写){ return ( jsx ) } 类组件--有状态组件 语法: class 类名(当前组件名首字母大写) extends React.Component{ render(){ render 阅读详情

状态机

React采用状态机的状态来重新渲染页面(不操作DOM),状态保存在实例变量state中,该状态初始化后必须使用setState来修改状态,否则不会触发重新渲染机制,初始化一般在构造中或者类中方法外

初始化:this.state={key:value,key,value}
修改状态:this.setState({key:value,key:value})
使用状态:this.state.key

	// 这三种修改状态的写法都是可以的
    handleClick() { 
      this.setState(state=>({
            isToggleOn:!state.isToggleOn
        })
        )
    }
    
    handleClick2() { 
        this.setState(function(state) {
            return {isToggleOn: !state.isToggleOn};
        });
    }
    // 推荐这种写法
    handleClick3() {
        this.setState({
            isToggleOn: !this.state.isToggleOn
        });
    }

构造函数使用constructor表示,且如需使用this,则必需调用super(props)进行初始化

class Clock extends React.Component {
  constructor(props) {
    super(props);
    this.state = {date:new Date()};
  }
 
  render() {
    return (
      <div>
        <h1>Hello, world!</h1>
        <h2>现在是 {this.state.date.toLocaleTimeString()}.</h2>
      </div>
    );
  }
}
 
ReactDOM.render(
  <Clock />,
  document.getElementById('example')
);

注意:组件在调用过程中不关心是否是有状态的,数据从顶向下流动,某个组件的状态只能影响其下的子组件

生命周期

生命周期控制:可以在组件挂载和卸载时做一些事情,比如释放占用的资源。比如componentDidMount这个是挂载时时,即组件输出到DOM时执行,componentWillUnmount是卸载时处理

组件生命周期可分为三个状态:
Mounting(插入真实DOM)
Updating(正在渲染)
Unmounting(移出真实DOM)

生命周期方法(按照先后顺序)

  1. 初始
    defaultProps:静态属性,用于初始化props值
    constructor:如果之后的代码需要使用props,需要先调用super(props)方法,否则有可能有bug,这里面会执行state的赋值。注意:不要在构造函数中引入副作用或者订阅,在componentDidMount中使用。
    static getDrivedStateFromProps:静态方法,在render前调用,并且在初始挂载及后续更新时都会被调用。它应返回一个对象来更新 state,如果返回 null 则不更新任何内容。此方法无权访问组件实例。
    UNSAFE_componentWillMount() 在渲染前调用,该方法调用时表示组件对象的基础属性和方法都初始化完成。在该方法中调用this.setState不会引起组件重新渲染(因为组件此时还没有挂载到DOM上)【过时】
    render:页面触发渲染,在return前,无法通过getelement获取dom元素,render执行完,虚拟dom构建完毕才开始挂载页面。该方法之后就可以调用this.setState方法了。同时函数应该为纯函数,这意味着在不修改组件 state 的情况下,每次调用时都返回相同的结果,并且它不会直接与浏览器交互。
    componentDidMount : 在第一次渲染结束,DOM更新完毕后调用。常用来初始化页面数据,增加订阅或做异步请求获取数据。可以在 componentDidMount() 里直接调用 setState()。将触发额外渲染,但此渲染会发生在浏览器更新屏幕之前。保证了即使在 render() 两次调用的情况下,用户也不会看到中间状态。需要谨慎使用该模式,因为它会导致性能问题。通常,应该在 constructor() 中初始化 state。如果渲染依赖于 DOM 节点的大小或位置,比如实现 modals 和 tooltips 等情况下,可以使用此方式处理

  2. 更新
    static getDrivedStateFromProps:静态方法,获取props参数,16.3时setState和forceUpdate时不会触发这个函数,16.4之后就会了。
    UNSAFE_componentWillReceiveProps()(nextProps):方法,接收参数props为下一次的props值,里面this.props获取的为改变前的值。在这里改变state不会重渲染。
    shouldComponentUpdate(nextProps,nextState):返回一个布尔值。在组件接收到新的props或者state时被调用。在初始化时或者使用forceUpdate时不被调用。可以传递两个值:其中this.state为旧状态值,而nextProps,nextStates为新状态值。返回 false 以告知 React 可以跳过更新。请注意,返回 false 并不会阻止子组件在 state 更改时重新渲染。不能在这里企图阻止渲染,只能作为性能优化方式。禁止在 shouldComponentUpdate() 中进行深层比较或使用 JSON.stringify()。这样非常影响效率,且会损害性能。
    UNSAFE_componentWillUpdate()(nextProps):在组件接收到新的props时,且仅在父组件重新渲染时触发与state状态无关。在初始化时不会被调用。
    render:页面触发渲染,执行完毕才会开始挂载到页面上去,即更新DOM和refs
    static getSnapshotBeforeUpdate(preprops, prestate): 在最近一次更新渲染到Dom之前被调用(更新DOM前),可在此获得一些数值如滚动位置,该方法的返回值将作为componentDidUpdate()的第三个参数传入,如果没有调用该方法,则第三个参数为undefined
    componentDidUpdate(prevProps, prevState,snapshot): 在组件完成DOM更新后立即调用。首次渲染不会执行此方法。注意,如果在这个方法中改变state请设立好条件,否则产生无限循环。

  3. 卸载
    componentWillUnmount:在组件从 DOM 中移除之前立刻被调用。用于做一些清理工作,比如取消订阅和清除定时器等。禁止在此方法中调用this.setState

/*
当页面发生跳转后但由于前一个页面请求还没有结束,或者事件 定时器没有结束,但是页面跳转到下一个页面了,此时就会报错。
通常是 react 组件已经从 DOM 中移除,但是我们在组件中做的一些异步操作还未结束,如:接口调用等,当其完成时,执行setState操作,而此时我们已经将改组件dom移除,从而导致上述问题。

作者:zyghhhh
链接:https://www.jianshu.com/p/ea3cfc0a85da
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
/*

// 清除定时器
componentWillUnmount(){
  clearTimeout(this.timer)
}
// 解绑dom事件
componentWillUnmount(){
  //其他事件也类似
  window.onScroll = null
}
// 清除react事件
componentWillUnmount(){
  //其他事件也类似
  this.setState = (state,callback) => {
    return
  }
}
  1. 错误处理
    static getDerivedStateFromError(error):此生命周期会在后代组件抛出错误后被调用。 它将抛出的错误作为参数,并返回一个值以更新 state,比如UI降级。会在渲染阶段调用,因此不允许出现副作用(回调方法)返回值会更新state相当于setState
    componentDidCatch(error, info):会在“提交”阶段被调用,因此允许执行副作用。 它应该用于记录错误之类的情况

参考图1:
在这里插入图片描述
参考图2:
在这里插入图片描述
官网生命周期图示:注意:getDerivedStateFromProps在16.4前只有接收new props才更新!!
在这里插入图片描述
我总结的图示:
在这里插入图片描述
在绿色部分此时DOM已经更新完毕,如果再次改变状态会触发页面的重新渲染。深灰色的为过时方法,减少调用。

父子组件中的生命周期

在这种情况下:

  1. 组件初始化:render后开始构造子组件
父defaultProps
父constructor
父componentWillMount
父render
		子defaultProps
		子constructor
		子componentWillMount
		子render
		子componentDidMount
父componentDidMount
  1. 组件更新,同初始化一样,在render后进入子组件更新
在父组件中改变某个state
父shouldComponentUpdate
父componentWillUpdate
父render
		子componentWillReceiveProps
		子shouldComponentUpdate
		子componentWillUpdate
		子render
		子componentDidUpdate
父componentDidUpdate
  1. 卸载,由内向外
子componentWillUnmount
父componentWillUnmount

参考:https://developer.aliyun.com/article/780453

【PCL】SolidWorks 三维建模 STL, OBJ 采样生成 PCD 点云数据(附源码) [PCL自学篇] 一.SolidWorks三维建模STL,OBJ采样生成PCD点云数据新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 这阵子做线结构光视觉检测(轨道)项目的过程中,发现之前的许多知识点在逐渐遗忘,常言好记性 阅读详情

相关推荐

DFRobot MGC3130电容式手势传感器库深度解析

电容式近场感应(Electric Near Field Sensing)是一种非接触、抗干扰的三维空间感知技术,其原理基于人体介电特性对高频电场的扰动响应,具备低功耗、高鲁棒性与零物理接触等核心优势。该技术广泛应用于医疗人机交互、工业HMI、智能家电等对可靠性与环境适应性要求严苛的嵌入式场景。DFRobot_MGC3130库正是面向Microchip MGC3130芯片的工程化实现,封装了I²C驱动、ASU硬件加速调度及多层抽象API,支持手势识别、触控检测与接近唤醒等功能动态切换。结合电容式近场感应与嵌入

weixin_34620658的博客 551

React Redux 状态机

react 自身不带redux 需要下载。

yy_1806989573的博客 419

别再乱改宏定义了!STM32F103程序移植保姆级教程(从C8T6到ZET6实战)

本文详细解析了STM32F103程序从C8T6移植到ZET6的实战步骤,重点介绍了硬件差异、开发环境配置、时钟陷阱及外设处理等关键点。通过修改宏定义(如STM32F10X_HD)、调整启动文件和时钟配置,确保移植顺利进行。适合嵌入式开发者参考,避免常见移植问题。

weixin_42567497的博客 215

React状态机使用

react 自身不带redux 需要下载。

weixin_43606881的博客 434

C#+Winform+OpenCvSharp实战:5步搞定工业视觉检测框架(附源码下载)

本文详细介绍了如何使用C#、Winform和OpenCvSharp构建工业视觉检测框架,通过5个关键步骤实现高效、稳定的视觉检测系统。内容涵盖环境配置、相机集成、核心算法实现、系统集成与通信,以及部署优化,帮助开发者快速掌握工业视觉检测技术,提升检测精度和效率。附完整源码下载,助力工业数字化转型。

pz89012345的博客 551

谈谈 FOC和BLDC 电机控制

更具体地说,通过 “Park 变换”,我们可以把三相交流电流信号转换成两相直流电流信号,从而可以把三相交流电机的控制变得和两相直流电机控制一样简单。在内环 “电流环”中,一些比较重要的模块有 “Clark 变换” 和 “Park 变换” 等数学模块、电机电流信号检测模块以及能够提供电机的转速和转角位置信息的模块。日前,Qorvo 电机控制应用高级系统/应用工程师张绍发表了一个与 BLDC 和 FOC 相关的演讲,科普了 FOC 的相关知识,还讲解了 Qorvo 用于简化 FOC 实施方案的方法。

U_YAO的博客 2119

【思维扩展】状态机与 React 中的状态

JavaScript 中的状态机和 React 中的状态都涉及到对数据的管理,以反映系统或组件的当前状态。尽管它们有一些相似之处,但也存在一些区别,我们将在本文中探讨这些相似点和差异。

tutututu12345678的博客 460

PSINS工具箱15状态组合导航仿真程序(test_SINS_GPS_153)浅析-卡尔曼滤波设置+导航解算

文章目录test_SINS_GPS_153源码poserrsetkfinitgabiaskfupdate流程 test_SINS_GPS_153源码 poserrset function poserr = poserrset(dpos0, dlon, dhgt) % position errors dpos=[dlat;dlon;dhgt] setting. % % Prototype: poserr = poserrset(dpos0) % Input: dpos0=[dlat; dlon; dhgt],

十八与她的博客 2161

react中的状态机_使用状态机增强您的React

react中的状态机Mixing React and state machines is a great productivity boost for you as a developer. It also improves the usually shaky developers/designers collaboration. 混合使用React和状态机可以极大地提高您作为开发人员的工作效率。...

cumian8165的博客 783

ANSYS APDL实战:手把手教你搞定电磁-热耦合分析(附完整命令流)

本文通过一个工业感应加热线圈的实战案例,手把手教你使用ANSYS APDL完成电磁-热耦合分析。内容涵盖从几何建模、材料定义、网格划分到加载求解及后处理的完整流程,重点讲解了使用PLANE13单元进行双向耦合场分析的方法与命令流调试技巧,助力工程师快速掌握这一核心仿真能力。

weixin_29284201的博客 427

知识追踪实战:lstm+ Multi-head Attention注意力机制的学生做题成绩预测实战

知识追踪实战:lstm+ Multi-head Attention注意力机制的学生做题成绩预测实战

2222

夜光带你走进React.js(七)擅长的领域

夜光序言: 一条路,人烟稀少,孤独前行。却不得不坚持前行。因为它的尽头,种着理想。 正文: React State(状态) React 把组件看成是一个状态机(State Machines)。 通过与用户的交互,实现不同状态,然后渲染 UI,让用户界面和数据保持一致。 React 里,只需更新组件的 state,然后根据新的 state 重...

夜光的博客 230

一文掌握DrissionPage的详细使用

是一个基于 Python 的网页自动化工具,主要用于网页数据的抓取、自动化操作和测试。它结合了 Selenium 和 Requests 的优点,提供了更简洁、高效的 API,适用于各种网页自动化任务。DrissionPage 是一个功能强大且易于使用的网页自动化工具,适用于各种网页自动化任务。希望本文的 DrissionPage 的基本使用方法和一些高级功能能够帮助到你。

数据知道的博客 1万+

终极教程:使用Vitis AI在Alveo卡上实现高性能AI推理加速

Vitis AI是Xilinx针对AI推理开发的完整堆栈,可在包括边缘设备和Alveo卡在内的Xilinx硬件平台上实现高效的AI加速。本教程将带您快速掌握如何利用Vitis AI工具链在Alveo卡上部署和优化AI模型,释放硬件的强大算力。 ## Vitis AI核心架构解析 🧠 Vitis AI提供了从模型优化到部署的全流程解决方案,其核心架构包括模型 zoo、优化器、量化器、编译器和运

gitblog_01102的博客 542

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

React状态管理(一)—— Redux

React状态管理(一)—— Redux

huihui_999的博客 1086

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

React状态机终极指南:使用XState与有限状态机管理复杂应用状态

在现代React应用开发中,**状态管理**是构建复杂用户界面的关键挑战。传统的useState和useReducer虽然简单易用,但在处理复杂状态转换时往往力不从心。今天,我们将深入探讨如何利用**XState**和**有限状态机**来优雅地管理React应用状态,让你的代码更加可预测和可维护。 ## 什么是有限状态机? **有限状态机**是一种数学模型,用于描述系统在不同状态之间的转换行为

gitblog_00011的博客 394

react状态管理之state

声明式编程意味着为每个视图状态声明 UI 而非细致地控制 UI(命令式)。当开发一个组件时:写出你的组件中所有的视图状态。确定是什么触发了这些 state 的改变。通过useState模块化内存中的 state。删除任何不必要的 state 变量。连接事件处理函数去设置 state。如果两个 state 变量总是一起更新,请考虑将它们合并为一个。仔细选择你的 state 变量,以避免创建“极难处理”的 state。用一种减少出错更新的机会的方式来构建你的 state。

weixin_73918953的博客 1413

告别复杂状态管理:React超轻量状态机useStateMachine全攻略

在React开发中,状态管理往往是项目复杂度飙升的主要原因之一。无论是处理表单验证、异步数据加载还是用户交互流程,传统的useState和useReducer钩子常常导致代码冗长且难以维护。而useStateMachine作为一款体积小于1KB的React状态机钩子,正为解决这一痛点提供了优雅的方案。本文将带你全面了解这个轻量级工具的核心优势、使用方法及实战场景,让状态管理变得简单而高效。 [!

gitblog_01034的博客 959

选择正确的 React 状态管理解决方案的指南

编者注 :本文于 2022 年 9 月 23 日更新,添加了关于为什么我们需要在 React 中进行状态管理的信息,添加了之前未包含在文章中的其他状态管理工具,例如 Jotai、MobX 和 Zusand,并添加了有关哪些状态管理的信息工具是 React 的最佳选择。状态管理是每个开发人员在构建 React 应用程序时面临的基本挑战——而且它不是一个小问题。在 React 中有很多有效的管理状态的方法,每一种都解决了一组突出的问题。

分享身边生活经验blog 1317

React Machinery:为React应用带来强大的状态机建模

React Machinery:为React应用带来强大的状态机建模 在现代前端开发中,状态管理一直是开发者面临的挑战之一。无论是简单的组件状态管理,还是复杂的全局状态管理,如何优雅地处理状态转换和渲染逻辑,一直是开发者追求的目标。今天,我们要介绍的是一个专为React应用设计的状态机建模工具——React Machinery。 项目介绍 React Machinery是一个轻量级的React库,...

gitblog_00700的博客 1040

React 4 种状态类型及 N 种状态管理

React 4 种状态类型及 N 种状态管理

Jack, what else can you do besides holding your little darling? 1649

React基础知识(4)——React State(状态)

React 把组件看成是一个状态机(State Machines)。通过与用户的交互,实现不同状态,然后渲染 UI,让用户界面和数据保持一致。 React 里,只需更新组件的 state,然后根据新的 state 重新渲染用户界面(不要操作 DOM)。 在app/home/index.js中的添加如下代码,在 render() 方法中使用 this.state 来修改当前的时间。 添加一个类构造函...

欢迎光临 354

react-redux状态机使用总结

react-redux状态机使用总结 react-redux简介 首先说redux,redux是一个第三方的状态管理库,react-redux是facebook官方出品的基于redux的专用于react项目做状态管理使用的插件。react-redux的工作模型图如下(仍然以技术器demo为例): 使用方法 从上面的图可以看出react通过容器组件和redux进行通讯,通过store的getState方法获取状态,通过dispatch方法更改状态, 因为react-redux其实就是在redux的基础上做了

Joey_Tribiani的博客 536

react中的状态机_在基于状态图的状态机上使用React的模式

react中的状态机by Shawn McKay 肖恩·麦凯(Shawn McKay) 在基于状态图的状态机上使用React的模式 (Patterns for using React with Statechart-based state machines) Statecharts and state machines offer a promising path for designing ...

cumi7754的博客 629

React/React Native之状态机原理

在讲React/React Native状态机原理之前,先让大家看一个春哥用React编写的小案例的网页效果图,当文本框中的内容发生变化时,会将文本框中的内容同步输出,按照我们之前Android和iOS的思维,当文本框中内容发生变化时,它会触发一个回调函数,然后在回调函数中取出文本框中的text值然后赋给下面的一个label。 http://yiqizhongchuang.cn/3react

大灰狼的小绵羊哥哥的博客 1644

React State 状态机

html:<!DOCTYPE html> <html> <head> <meta charset='utf-8' /> <script src="https://fb.me/react-0.13.3.js"></script> <script src="https://fb.me/JSXTransformer-0.13.3.js"></scri

SS 1966

半小时深刻理解React

声明:本文来自腾讯增值产品部官方公众号小时光茶社,为优快云原创投稿,未经许可,禁止任何形式的转载。 作者:左明,企鹅电竞前端团队leader,腾讯高级工程师。从事web开发超过8年,主导过微云web版、腾讯云助手、手Q游戏公会、企鹅电竞App等项目,有丰富的前端架构经验。 责编:钱曙光,关注架构和算法领域,寻求报道或者投稿请发邮件qianshg@youkuaiyun.com,另有「优快云...

博客 7327
上一篇: 小鸡啄米之React语法
下一篇: 小鸡啄米之React事件处理
天落枫
博客等级 码龄10年 91粉丝 92原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值