美文网首页
React组件之Clock

React组件之Clock

作者: 范蓄能 | 来源:发表于2018-10-06 10:59 被阅读124次

这个例子是React官方文档里面的,代码也在CodePen,例子非常简单,展示了React组件开发的基本过程,这里将这个例子进行分析记录,当做学习笔记吧!首先看代码:

//HTML
 <div id="root">
    <!-- This element's contents will be replaced with your component. -->
</div>

//JS
function FormattedDate(props) {
  return <h2>It is {props.date.toLocaleTimeString()}.</h2>;
}

class Clock extends React.Component {
  constructor(props) {
    super(props);
    this.state = {date: new Date()};
  }

  componentDidMount() {
    this.timerID = setInterval(
      () => this.tick(),
      1000
    );
  }

  componentWillUnmount() {
    clearInterval(this.timerID);
  }

  tick() {
    this.setState({
      date: new Date()
    });
  }

  render() {
    return (
      <div>
        <h1>Hello, world!</h1>
        <FormattedDate date={this.state.date} />
      </div>
    );
  }
}

function App() {
  return (
    <div>
      <Clock />
      <Clock />
      <Clock />
    </div>
  );
}

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

程序的运行过程:

1、在html里面定义一个div,id为root

2、 调用ReactDOM.render使用App渲染id为root的div,这里会调用函数App

3、函数App返回的是什么呢?不是字符串,也不是HTML,而是JSX,JSX是JavaScript语法的扩展,Babel会将JSX编译成React.createElement()的调用,这里可以简单看成返回界面布局就行了

4、在函数App返回的布局中,有三个Clock组件,Clock组件继承React.Component,当被传入ReactDOM.render中后,会调用Clock构造方法

5、在Clock构造方法可以接收一个props, 它来保存组件的组件的属性,这里并没有传入任何属性值,在构造方法里面初始化组件的状态state,给状态设置了date字段

6、接下来会调用Clock的render方法来渲染组件,render方法也是返回了JSX,里面有Hello World的标题,并且调用FormattedDate函数,传入参数date,返回时间的JSX,在FormattedDate函数里通过props.date获取传入的date

7、这时候就已经可以看到三个Clock显示时间了

8、那时间怎么自动更新的呢?当Clock被插入DOM时,会触发componentDidMount,当Clock从DOM移除时,会触发componentWillUnmount,所以在componentDidMount调用时开始定时更新,在componentWillUnmount关闭定时更新

9、定时更新会调用tick方法,tick方法调用setState来更新date字段

10、setState方法会触发render方法的重新调用,进而更新时间

由于笔者之前是做移动端开发,React的组件的概念跟iOS和Android的View的概念基本一致,甚至一些方法可以对应的上,如componentDidMount和componentWillUnmount可对应Android View中的onAttachedToWindow和onDetachedFromWindow, Clock中的render可对应Android View中的onDraw。可以看出来编程理念都是大同小异。组件化实际上就是模块化,提高了代码的复用性和可维护性。

相关文章

  • React组件之Clock

    这个例子是React官方文档里面的,代码也在CodePen,例子非常简单,展示了React组件开发的基本过程,这里...

  • React Native基础之Image

    React Native基础之Image Image组件 在React Native中,Image组件是用来...

  • react常用的倒计时组件

    React Countdown Clock安装 npm install react-countdown-clo...

  • React Native常用组件之ScrollView

    配置React Native的开发环境 React Native常用组件之ScrollView React Nat...

  • React基础

    React包含react元素和react组件 react元素 react组件 react组件分为函数组件和类组件 ...

  • React 进阶之组件实战视频教程(10 个视频)

    React 进阶之组件实战视频教程(10 个视频) 这套课程来学习各种 第三方 React 的组件库 React ...

  • React Native之React整理(二)

    本篇为《React Native之React整理》的第二篇。本篇将从组件(Component)的详细说明、组件的生...

  • 一起来点React  Native

    一起来点React Native 配置React Native的开发环境 React Native常用组件之Vie...

  • React-Native1

    React Native常用组件之View 1. JSX和组件的概念 React的核心机制之一就是虚拟DOM:可以...

  • RN之Image

    React Nativ之Image组件 一个用于显示多种不同类型图片的React组件,包括网络图片、静态资源、临时...

网友评论

      本文标题:React组件之Clock

      本文链接:https://www.haomeiwen.com/subject/akthaftx.html