返回顶部
首页 > 资讯 > 前端开发 > JavaScript >React State状态与生命周期的实现方法
  • 725
分享到

React State状态与生命周期的实现方法

2024-04-02 19:04:59 725人浏览 薄情痞子
摘要

一、实现组件的方法: 组件名称首字母必须大写 1.通过js函数方式实现组件 <div id="app"></div> <script type="t

一、实现组件的方法:

组件名称首字母必须大写

1.通过js函数方式实现组件


<div id="app"></div>
<script type="text/babel">
  var ReactDiv = document.getElementById('app');
  function GetReactComp(){
    return <p>我是react组件</p>
  }
  const hellocomp = < GetReactComp />  //首字母大写
  const reactSpan = (
    <span>
      { hellocomp }
    </span>
  )
  ReactDOM.render(reactSpan,ReactDiv)
</script>

2.通过es6 class实现组件


<div id="class"></div>
<script type="text/babel">
  var reactDiv1=document.getElementById('class');
  //定义类组件
  class MyReactComp extends React.Component{
    render(){
      return (
        <h2>类组件</h2>
      )
    }
  }
  //使用类组件
  const testDiv = (
    <div>{<MyReactComp/>}</div>
  )
	//挂载
  ReactDOM.render(testDiv,reactDiv1)
</script>

二、props组件传值

React对props有严格的保护机制,一旦给定值,在组件中不允许被改变


<div id="app"></div>
<script type="text/babel">
  var reactDiv = document.getElementById('app');
  class ReactClassComp extends React.Component {
    render(){
      return (
      <div>
      <p>用户名:<input type="text" value={ this.props.name }/></p>
      <p>性别:<input type="text" value={ this.props.gender }/></p>
      </div>
      )
    }
  }

  ReactClassComp.defaultProps={
    name:'刘备',
    gender:'男'
  }
  const reactp=(
    <span>
      {<ReactClassComp />}  
    </span>
  )
  ReactDOM.render(reactp,reactDiv)
</script>

在这里插入图片描述

注意: 在很多场合中,组件的内容需要根据数据的刷新而刷新,这个时候就需要用到React提供的State

三、State状态

  • React将组件看作是状态机,通过内部定义的状态与生命周期实现与用户的交互,维持组建的不同状态,然后通过渲染UI保证用户界面和数据一致性。
  • 创建方式:利用ES6的class继承方法super,可以将props传递到React.Component的构造函数中。

1.React生命周期 挂载(mount):

当组件实例被创建并插入DOM中时

(1)constructor(props) -->在组件挂载之前,会调用它的构造函数。如果不需要初始化state或不进行方法绑定,则不需要创建构造函数。

构造函数仅用于以下两种情况:

  • 通过给this.state赋值对象来初始化内部state
  • 为事件处理函数绑定实例

注意: 在constructor()函数中不要调用setState()方法。如果需要使用内部state,可直接在构造函数中为this.state赋值初始化state.


constructor(props){
	super(props);
		this.state = {
			date:new Date()
		}
		this.handleShow = this.handleShow.bind(this)
	
}

(2) render() -->必须要实现的

会检查this.props和this.state的变化并返回以下类型之一:

  • React元素:通常通过JSX创建
  • 数组或fragments:返回多个
  • Portals:可以渲染节点到不同的DOM子树中
  • 字符串或数值类型:被渲染为文本节点
  • 布尔类型或null:什么都不渲染

纯函数:在不修改组件state的情况下,每次调用都返回相同的结果,并且它不会直接与浏览器交互。
如果需与浏览器进行交互,在ComponmentDidMount()或其他生命周期中进行定义

(3) ComponmentDidMount() -->在组件挂载后立即调用。

  • 依赖DOM节点的初始化
  • 实例化网络请求获取数据
  • 添加订阅,需要在componentWillUnmount()中取消订阅

注意: 可以在ComponmentDidMount()中直接调用setState()。它将触发额外渲染,但此渲染会发生在浏览器更新屏幕之前。保证了即使在render()两次调用的情况下,用户不会看到中间状态。

更新:

compomentDidUpdate(prevProps,prevProps,snapshot):更新后立即调用,首次渲染不会执行此方法,当组件更新后,可以在此处对DOM进行操作。


compomentDidUpdate(prevProps){
	if(this.props.userID !== prevProps.userID){
		this.fetchData(this.props.userID)
	}
}

注意: 若在compomentDidUpdate() 调用setState(),需要包裹在一个条件语句中,否则会导致死循环。还会导致额外的重新渲染,虽然用户不可见,但会影响组件性能。

卸载:

componentWillUnmount() -->在组件卸载及销毁之前直接调用。
注意: componentWillUnmount()中不应调用setState()方法,因为组件将永远不会重新渲染。组件实例卸载后,将永远不会再挂载它。

2.生命周期实例-->时钟:


<div id="app"></div>
<script type="text/babel">
  var reactDiv = document.getElementById('app')
  //定义类组件 MyStateComp 
  class MyStateComp extends React.Component {
    //构造函数
    constructor(props) {
      super(props); 
      //通过this.state初始化state内部
      this.state = {
        date:new Date(),
        show:false,
        text:'显示'
      }
      //为事件处理函数绑定实例
      this.handleShow = this.handleShow.bind(this)
    }
    //添加订阅
    componentDidMount() {
      this.timerID = setInterval(()=>this.tick(),1000)
    }
    //时间函数
    tick() {
      this.setState({  //setState更新组件的state
        date:new Date()
      })
    }
    //实例显示、隐藏
    handleShow() {
      this.setState(state=>({
        show: !state.show,
        text: !state.show?'隐藏':'显示'
      }))
    }
    //组件卸载:清空定时器
    componentWillUnmont() {
      clearInterval(this.timerID)
    }
    
    render() {
      let isshow=this.state.show;
      let element;
      if(isShow){
        element = <h2 >{this.state.date.toLocaleTimeString()}</h2> 
      }else{
        element = null
      }
      return (
        <div>
          <button onClick={this.handleShow}>{this.state.text}时间</button>
          {element}
        </div>
      )
    }
  }
  const reactSpan = (
    <span>
      {<MyStateComp/> }  
    </span>
  )
  ReactDOM.render(reactSpan,reactDiv)
</script>

在这里插入图片描述

到此这篇关于React State状态与生命周期的文章就介绍到这了,更多相关React State生命周期内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: React State状态与生命周期的实现方法

本文链接: https://lsjlt.com/news/122217.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • React State状态与生命周期的实现方法
    一、实现组件的方法: 组件名称首字母必须大写 1.通过JS函数方式实现组件 <div id="app"></div> <script type="t...
    99+
    2024-04-02
  • Flutter有无状态类与State及生命周期详细介绍
    目录无状态类有状态类状态State生命周期Flutter中的生命周期类似于Vue、React中的生命周期一样,有初始化、状态更新、停用、销毁等。 在React中,组件分为函数式组件和...
    99+
    2024-04-02
  • React中state属性和生命周期的使用
    目录一、React组件的state属性和生命周期1、state的定义2、更新状态(state)3、组件的生命周期(1)挂载(mount)(2)案例(隐藏或显示实时更新的计时器)(3)...
    99+
    2023-02-12
    React state属性 state生命周期 React生命周期
  • 使用React Hooks模拟生命周期的实现方法
    目录前言constructorcomponentDidMount使用 hooks 模拟 componentDidMountshouldComponentUpdatecomponent...
    99+
    2023-02-08
    React Hooks模拟生命周期 React Hooks生命周期
  • 深入探究Java线程的状态与生命周期
    目录一、线程的状态新建(初始)就绪(可运行)运行阻塞死亡二、线程的状态转移三、线程的生命周期一、线程的状态 NEW: 安排了工作, 还未开始行动RUNNABLE: 可工作的. 又可...
    99+
    2024-04-02
  • android生命周期的状态有哪几种
    Android生命周期的状态有以下几种:1. 开始状态(Initial State):应用程序刚启动或重新启动,但没有创建任何活动(...
    99+
    2023-10-20
    android
  • React的生命周期实例分析
    这篇文章主要讲解了“React的生命周期实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“React的生命周期实例分析”吧!一、React生命周期React 生命周期分为三种状态 初始化...
    99+
    2023-07-02
  • Java线程的6种状态与生命周期是什么
    本文小编为大家详细介绍“Java线程的6种状态与生命周期是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java线程的6种状态与生命周期是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1.线程状态(生命...
    99+
    2023-06-30
  • 一文详解Java线程的6种状态与生命周期
    目录1.线程状态(生命周期)2.操作线程状态2.1.新创建状态(NEW)2.2.可运行状态(RUNNABLE)2.3.被阻塞状态(BLOCKED)2.4.等待唤醒状态(WAITING...
    99+
    2024-04-02
  • java线程生命周期的状态有哪几种
    Java线程的生命周期有以下几种状态:1. 新建(New):当线程对象被创建时,该线程处于新建状态。2. 就绪(Runnable):...
    99+
    2023-09-11
    java
  • bms裸金属服务器的生命周期状态
    裸金属服务器是一种常见的计算机硬件设备,它通常由一个或多个裸金属组件组成。裸金属服务器在设计和生产的过程中需要考虑多个方面,包括但不限于以下内容: 处理器:裸金属服务器的处理器通常包括多个裸金属组件,例如缓存、指令级并行、存储器管理、外...
    99+
    2023-10-26
    生命周期 状态 金属
  • bms裸金属服务器拥有的生命周期状态
    裸金属服务器是一种使用裸金属(裸金属)材料制造的服务器,通常具有类似于金属的属性,如耐腐蚀性、防磁性和高强度等。这种服务器可以承受各种恶劣环境的考验,如高温、低温和潮湿等。 以下是一些裸金属服务器所具备的生命周期状态: 使用寿命:由于裸...
    99+
    2023-10-26
    生命周期 状态 金属
  • react生命周期的三个过程实例分析
    今天小编给大家分享一下react生命周期的三个过程实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起...
    99+
    2024-04-02
  • java中线程的完整生命周期有哪几种状态
    Thread.State类Thread.State类定义了线程的几种状态,在一个完整的生命周期中通常要经历五种状态:新建: 当一个Thread类或其子类的对象被声明并创建时;就绪: start()方法后,将进入线程队列等待CPU时间片;运行...
    99+
    2016-02-24
    java入门 java 线程 生命周期 状态
  • activity生命周期的方法有哪些
    在Android开发中,Activity的生命周期方法有以下几种:1. onCreate(): 在Activity被创建时调用,用于...
    99+
    2023-09-11
    activity
  • Android的Fragment的生命周期各状态和回调函数使用
    回调函数 就像activities一样,fragments也有它们自己的生命周期。理解fragments的生命周期,可以使你在它们被销毁的时候保存它们的实例,这样在它们重新被创...
    99+
    2022-06-06
    回调 函数 fragment 回调函数 Android
  • Spring中bean的生命周期之getSingleton方法
    Spring中bean的生命周期 要想讲清楚spring中bean的生命周期,真的是不容易,以AnnotationConfigApplicationContext上下文为基础来讲解b...
    99+
    2024-04-02
  • Java线程生命周期的终止与复位怎么实现
    这篇文章主要介绍“Java线程生命周期的终止与复位怎么实现”,在日常操作中,相信很多人在Java线程生命周期的终止与复位怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java线程生命周期的终止与复位怎...
    99+
    2023-07-02
  • Vue生命周期与后端交互实现流程详解
    目录表单控制购物车案例v-model进阶(了解)vue生命周期与后端交互电影案例表单控制 1.input:checkbox(单选,多选),radio(单选) 2.代码展示 <!...
    99+
    2022-11-13
    Vue生命周期 Vue后端交互
  • React中useEffect与生命周期钩子函数的对应关系说明
    目录React useEffect与生命周期钩子函数的对应关系使用格式一:不带参数的情况使用格式二:带第二个参数,参数为空数组使用格式三:带第二个参数,并且指定了依赖项使用格式四:依...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作