热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

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

这篇文章主要介绍了ReactState状态与生命周期的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

一、实现组件的方法:

组件名称首字母必须大写

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

2.通过ES6 class实现组件

二、props组件传值

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

在这里插入图片描述

注意: 在很多场合中,组件的内容需要根据数据的刷新而刷新,这个时候就需要用到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.生命周期实例-->时钟:

在这里插入图片描述

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


推荐阅读
author-avatar
mobiledu2502886691
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有