美文网首页
React组件

React组件

作者: IsaacHHH | 来源:发表于2018-10-03 20:16 被阅读30次

组件

组件是React的核心、精髓。组件有输入、输出以及自身状态,分别对应props、render、state,相信稍微用过React的同学都很清楚。

一般的,我们现在常用的组件创建方式如下:

import React, { Component } from 'react';
class App extends Component {
  render() {
    return <h1>你好👋</h1>
  }
}

这种目前最常见的书写方式:Component, 是因为ES6的出现。当然,还有其他的创建组件方式。

createClass

通过createClass来创建组件是最原始的方式:

import React, { Component } from 'react';
const App = React.createClass({
  getDefaultProps: function() {
    return { name: 'Jack' }
  }
  getInitialState: function() {
    return { word: 'hello word' }
  }
  render: function() {
    return <h1>你好👋, { this.state.word }, { this.props.name }</h1>;
  }
});

Functional Component

或许你也听过函数式组件,这也是创建组件的一种方式。由于一些组件没有自身状态,也称为无状态组件,此时我们就可以使用函数式组件,相比较而言,无状态组件的性能会优于状态组件。

import React from 'react';
function App(props) {
  const { name } = this.props;
  return <h1>你好, { name }</h1>;
}

很简单,就是一个普通的函数,将JSX return出去,可以说名副其实。
另外,通过前面class定义的类也是一个函数,只不过这里的函数式组件没有继承Component而已。

PureComponent

PureComponent是React15.3引入的一个全新的组件基类,用来代替之前的react-addons-pure-render-mixin在React内部PureComponent继承自Component,并将isPureReactComponet属性置为true

所以,React内部通过判断isPureReactComponent是否为true来区分是否PureComponent组件。

说了这么多,到底PureComponent 和 Component有什么区别呢?

因为前面提到,PureComponent继承自Component,所以功能几乎一致,区别也仅在于shouldComponentUpdate。在PureComponent中该生命周期不会直接返回true,而是会对属性和状态进行一个浅比较,注意,是浅比较,通过比较结果是否相等来决定是否重新渲染。

如果我们通过Component来模拟PureComponent大致如下:

import React, { Component } from 'react';
class App extends Component {
  shouldComponentUpdate(nextProps, nextState) {
    const { props, state } = this;
    function shallowCompare(a, b) {
      return a === b || Object.keys(a).every(k => a[k] === b[k]);
    }
    // 调用比较函数
    return shallowCompare(nextProps, props) && shallowCompare(nextState, state);
  }
}

总结

  • 如果组件支持ES6写法, 建议使用Component的形式,否则使用createClass的形式;
  • 如果组件没有自身状态,可以使用Functional Component形式,也就是函数式组件;
  • 对于PureComponent和Component区别前面也已经介绍了,所以对于PureComponent的使用,和Component的使用情况一致,但是建议大家还是使用PureComponent。

相关文章

  • React基础

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

  • 组件

    组件是React的基石,所有的React应用程序都是基于组件的。React组件,可以通过React.createC...

  • ReactNative学习笔记(三)Hello World!

    React Native 看起来很像 React,但React Native的基础组件是原生组件 不是web组件。...

  • react子组件向父组件传值

    相关资料:react 父组件怎么获取子组件的这个值React组件间信息传递方式react同级组件之间传值 • 父...

  • React 进阶二 组件详解

    React组件 React的组件大概分为俩部分,无状态组件和有状态组件 无状态组件。下面React官网中定义的一个...

  • 2、react基础介绍

    React理念 划分组件边界的原则 React组件的数据种类 React组件的声明周期 组件的划分 高内聚 低耦合...

  • React概念图

    React概念图 React组件生命周期概念图 参考文档:React入门教程 组件生命周期React:组件生命周期...

  • react16.3-jest

    功能组件和UI组件 react-antd 命名 react 规定组件开头都为大写,所以如果react项目如果用an...

  • 如何创建React组件并发布到npm?

    实现步骤: 创建React组件项目; 创建测试项目并引用组件; 发布React组件到npm上; 一、创建React...

  • RN原始项目-HelloWorld

    React Native看起来很像React,只不过其基础组件是原生组件而非web组件,。要理解React Nat...

网友评论

      本文标题:React组件

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