React学习:State 和 生命周期的应用

本文介绍React中的组件概念及其生命周期,包括函数式组件和类组件的创建方式,如何使用状态(state)和属性(props)来更新组件内容,并展示了如何利用生命周期方法实现定时更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

React :元素构成组件,组件又构成应用。
React核心思想是组件化,其中 组件 通过属性(props) 和 状态(state)传递数据。

首先看个实例

写法一:函数式组件

function Clocks(props){
  return <div>time is : {props.date.toLocaleTimeString()}</div>;
}
function trick(){
  let clockElement =  <Clocks date = {new Date()}/>;//clockElement必须放trick里
  ReactDOM.render(
    clockElement,
    document.getElementById('root')
  );
}
setInterval(trick,1000);

写法二:类组件(一般都用这个)

class Clocks extends React.Component{
  render(){
    return <div>time is : {this.props.date.toLocaleTimeString()}</div>
  }
}

function trick(){
  let clockElement =  <Clocks date = {new Date()}/>;//clockElement必须放trick里
  ReactDOM.render(
    clockElement,
    document.getElementById('root')
  );
}
setInterval(trick,1000);

输出(每秒更新一回):
这里写图片描述

在上面中加入 状态 和 生命周期

class Clocks extends React.Component{
  // 类 构造函数 初始化 this.state
  constructor(props){
    super(props);//如果不加这句,this.props 将在 constructor(构造函数) 中是 undefined(未定义)
    this.state = {date:new Date()};
  }
  //挂载:第一次渲染render 到DOM后,调用它
  componentDidMount(){
    this.timerId = setInterval(
      () => this.tick(),
      1000
    );
  }
  //卸载:产生的 DOM 被销毁时,调用它
  componentWillUnmount(){
    clearInterval(this.timerId);
  }
  tick(){
    this.setState({
      date:new Date()
    });
  }
  render(){
    return (
      <div>
        time is : {this.state.date.toLocaleTimeString()}
      </div>
    );
  }
}

ReactDOM.render(
  <Clocks/>,
  document.getElementById('root')
);

输出:同上

上面调用方法的顺序:
(1)当 < Clock /> 被传入 ReactDOM.render() 时, React 会调用 Clock组件的构造函数。 因为 Clock 要显示的是当前时间,所以它将使用包含当前时间的对象来初始化 this.state 。

(2)然后 React 调用了 Clock 组件的 render() 方法。 React 从该方法返回内容中得到要显示在屏幕上的内容。然后,React 然后更新 DOM 以匹配 Clock 的渲染输出。

(3)当 Clock 输出被插入到 DOM 中时,React 调用 componentDidMount() 生命周期钩子。在该方法中,Clock 组件请求浏览器设置一个定时器来一次调用 tick()。

(4)浏览器会每隔一秒调用一次 tick()方法。在该方法中, Clock 组件通过 setState() 方法并传递一个包含当前时间的对象来安排一个 UI 的更新。
通过 setState(), React 得知了组件 state(状态)的变化, 随即再次调用 render() 方法,获取了当前应该显示的内容。 这次,render() 方法中的 this.state.date 的值已经发生了改变, 从而,其输出的内容也随之改变。React 于是据此对 DOM 进行更新。

(5)如果通过其他操作将 Clock 组件从 DOM 中移除了, React 会调用 componentWillUnmount() 生命周期钩子, 所以计时器也会被停止。

Outlook是微软的非常好用的电子邮箱客户端,但是即使是到了2016版本,该客户端还是有两个比较人性化的问题,其一是能开机自启动;其二是点击关闭按钮的时候会直接完全退出而是后台运行,其实非常符合我们的使用情况和理念——我们是需要Outlook一直挂在后台以方便第一时间接收到新的邮件的。今天笔者就在这里向大家介绍一下解决的方法。 首先是如何让Outlook程序自启动。 这个问题我们采用Windows系统最最最传统和古老的方式来解决,复制一个Outlook的快捷方式丢到Windows系统开始菜单的启动文件夹里面即可。但是具体的操作根据Win 7和Win 8/10而有所区别。 Win 7的话首先在开始菜单里面找到Outlook的快捷方式,然后先复制一份到桌面(方便下一步操作)。然后再在开始菜单中找到“启动”文件夹,把刚刚复制的Outlook的快捷方式放进去即可。 Win 8/10会稍微复杂一些,首先也是复制一份Outlook的快捷方式,然后打开此电脑,按照下图的方式显示隐藏的文件夹,依次打开系统盘→用户→你当前登录账户的用户名→AppData→Roaming→Microsoft→Windows→开始菜单→程序→启动。将Outlook的快捷方式复制到文件夹内即可。 然后是比较让人头疼的问题,就是如何保持Outlook后台运行。 这个问题有两个层次的解决方案,首先是管得住自己的手(qi lin bi)的方案。 这个只需要在打开了Outlook的情况下,右键任务栏的图标勾选最小化时隐藏,然后要关闭的时候都点最小化就可以保证Outlook一直在后台运行了。 当然我知道其实你们是管住自己的手的,总是会习惯点“X”(单身了XX年的手速确实可怕)。过也无伤大雅,ReliefJet Quicks™ for Microsoft Outlook插件可以解决这个问题。 首先在http://www.reliefjet.com/Quicks/Features/QuickTweaks下载这个插件,然后关闭Outlook进行安装(笔者清楚未关闭Outlook是否会影响安装,但是为了避免未知错误还是请先关闭Outlook)。安装完成后打开Outlook,可以看见多了一个选项卡,如下图。 然后点击选项卡中的Quicks Options,按照下图找到选项勾选即可,这样Outlook窗口的关闭按钮的功能就变成了最小化。以后需要完全退出的时候右键Outlook的任务栏图标退出即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值