React对于生命周期的深入研究

简介: React对于生命周期的深入研究

@[toc]

生命周期


在这里插入图片描述

static getDerivedStateFromProps()方法

这是新版本的生命周期函数中新增的,通常很少使用。
从字面翻译来看,这意味着在render()方法之前,props返回一个对象来更新状态state,该状态在组件的初始化和更新期间被调用。
我们都知道,类类型组件中使用的static关键字表示类原型的静态方法。
它接收两个参数,一个是props,另一个是state。
传递的属性值用于替换当前组件中的状态。
这个声明循环函数在语义上命名,这有助于理解和记忆。
count的值一直是通过props传入的111,并不会发生任何改变。

static getDerivedStateFromProps(props) {
    return props;
}
ReactDOM.render(<Count count="111"/>,document.getElementById('root'))

直接直译意味着当前组件已经安装,初始化和安装操作已经基本完成。
通常,页面挂载后,我们可以向后台发送Ajax异步请求以获取数据,在该组件中还可以完成启动定时器和组件之间的消息订阅和发布。
此组件在开发中经常使用,因此我们应该重点了解其用法。

const element = <HelloMessage/>;
ReactDOM.render(
  element,
  document.getElementById('example')
);

旧版本中的生命周期函数componentwillmount()现在不推荐使用,其应用也非常有限。
它被人们误用的可能性很高,这可能会导致潜在的无法检测的错误。

class Name extends React.Component {
  render() {
    return (
      <h1>{this.props.name}</h1>
    );
  }
}
 
class Link extends React.Component {
  render() {
    return (
      <a href={this.props.site}>
        {this.props.site}
      </a>
    );
  }
}

Props 验证

Props验证使用proptype,这可以确保正确使用我们的应用程序组件。React Proptypes提供了许多验证器来验证传入数据是否有效。当无效数据被传递到props时,JavaScript控制台将抛出警告。

class MyTitle extends React.Component {
  render() {
    return (
      <h1>Hello, {this.props.title}</h1>
    );
  }
}

下面的示例创建了一个mytitle组件。属性title是必需的,是字符串。
非字符串类型将自动转换为字符串:

MyTitle.propTypes = {
  title: PropTypes.string
};
ReactDOM.render(
    <MyTitle title={title} />,
    document.getElementById('example')
);

可以将prop声明为指定的JS基本数据类型。默认情况下,这些数据是可选的

 optionalArray: React.PropTypes.array,
    optionalBool: React.PropTypes.bool,
    optionalFunc: React.PropTypes.func,
    optionalNumber: React.PropTypes.number,
    optionalObject: React.PropTypes.object,
    optionalString: React.PropTypes.string,

shouldComponentUpdate()方法

在组件更新之前调用此声明循环函数,这相当于在组件更新前添加一个阀门,以控制组件在满足什么条件时将被更新。
可以控制是否通过返回值更新组件。
如果更新返回true,则不会更新。
如果返回值为false,则当不使用此声明循环函数时,默认返回值为true。
可以是多个对象类型中的一个:

 optionalUnion: React.PropTypes.oneOfType([
      React.PropTypes.string,
      React.PropTypes.number,
      React.PropTypes.instanceOf(Message)
    ]),

自定义验证器。如果验证失败,则需要返回错误对象。不要使用“控制台警告”或抛出异常,因为“oneoftype”将无效。

customProp: function(props, propName, componentName) {
      if (!/matchme/.test(props[propName])) {
        return new Error('Validation failed!');
      }
    }

元素变量

可以使用变量来存储元素。
它可以帮助有条件地渲染组件的一部分,而输出的其余部分不会更改。
在下面的示例中,我们将创建一个名为logincontrol的有状态组件。
它将根据当前状态呈现<loginButton/>或<logoutbutton/>,并在上一个示例中呈现<greeting/>。

  handleLoginClick() {
    this.setState({isLoggedIn: true});
  }
 
  handleLogoutClick() {
    this.setState({isLoggedIn: false});
  }
 
  render() {
    const isLoggedIn = this.state.isLoggedIn;
 
    let button = null;
    if (isLoggedIn) {
      button = <LogoutButton onClick={this.handleLogoutClick} />;
    } else {
      button = <LoginButton onClick={this.handleLoginClick} />;
    }
 
    return (
      <div>
        <Greeting isLoggedIn={isLoggedIn} />
        {button}
      </div>
    );
  }

正确使用生命周期函数将使我们的开发更有效率。
react official提供了许多生命周期函数,但它们主要使用诸如render()、componentdidmount()、componentwillunmount()和getderivedstatefromprops()等生命周期函数。
其他生命周期函数可以通过引用官方文档直接使用,这就是react中的生命周期函数。

class Counter extends React.Component{
  constructor(props) {
      super(props);
      this.state = {clickCount: 0};
      this.handleClick = this.handleClick.bind(this);
  }
  
  handleClick() {
    this.setState(function(state) {
      return {clickCount: state.clickCount + 1};
    });
  }

Getderivedstatefromprops():在调用render方法之前调用,并将在初始装载和后续更新期间调用。
根据shouldcomponentupdate()的返回值,确定react组件的输出是否受当前状态或属性更改的影响。
Shouldcomponentupdate():当属性或状态更改时,将在渲染执行之前调用Shouldcomponentupdate()。
Render():Render()方法是类组件中必须实现的唯一方法。
Getsnapshotbeforeupdate():在上次渲染输出(提交到DOM节点)之前调用。
Componentdidupdate():它将在更新后立即调用。

 tick() {
    this.setState({
      date: new Date()
    });
  }
 
  render() {
    return (
      <div>
        <h1>Hello, Runoob!</h1>
        <h2>现在时间是:{this.state.date.toLocaleTimeString()}.</h2>
      </div>
    );
  }
相关文章
|
2月前
|
前端开发 JavaScript
React 组件生命周期
React 组件生命周期
30 0
|
2月前
|
前端开发 JavaScript 数据安全/隐私保护
深入探索研究React表单
【10月更文挑战第6天】
91 57
|
1月前
|
前端开发 JavaScript
react 组件的生命周期
React组件的生命周期包括从创建到销毁的各个阶段,如挂载(mounting)、更新(updating)和卸载(unmounting)。每个阶段都有特定的方法,用于控制组件的行为和状态,确保高效、有序地渲染和管理UI。
|
2月前
|
设计模式 前端开发 JavaScript
深入探索研究React
【10月更文挑战第5天】
32 4
|
3月前
|
前端开发 JavaScript 开发者
介绍一下React生命周期
介绍一下React生命周期
108 9
|
2月前
|
存储 前端开发 JavaScript
深入理解React组件的生命周期与Hooks
【10月更文挑战第7天】深入理解React组件的生命周期与Hooks
126 0
|
4月前
|
前端开发 JavaScript
React的生命周期演示-新(12)
【8月更文挑战第15天】React的生命周期演示-新
53 5
React的生命周期演示-新(12)
|
4月前
|
前端开发 JavaScript
React的生命周期简介(十)
【8月更文挑战第15天】React的生命周期简介
51 2
React的生命周期简介(十)
|
3月前
|
前端开发 API UED
React组件生命周期详解
【9月更文挑战第4天】在React应用开发中,掌握组件生命周期对于管理状态和属性至关重要,并能有效提升应用性能。本文详细介绍了React组件生命周期的三个阶段:挂载、更新和卸载,并通过代码示例展示了如何避免状态更新导致的死循环及优化网络请求等问题,帮助开发者构建更高效、可维护的应用。
91 2
|
4月前
|
前端开发 JavaScript
React 组件的生命周期阶段详解
【8月更文挑战第30天】
50 7