什么是组件

组件化就好像我们的电脑装机一样,一个电脑由显示器、主板、内存、显卡、硬盘,键盘,鼠标...。

组件化开发有如下的好处:
降低整个系统的耦合度,在保持接口不变的情况下,我们可以替换不同的组件快速完成需求。
例如输入框,可以替换为日历、时间、范围等组件作具体的实现。调试方便,由于整个系统是通过组件组合起来的,在出现问题的时候,可以用排除法直接移除组件,或者根据报错的组件快速定位问题,之所以能够快速定位,是因为每个组件之间低耦合,职责单一,所以逻辑会比分析整个系统要简单。
提高可维护性,由于每个组件的职责单一,并且组件在系统中是被复用的,所以对代码进行优化可获得系统的整体升级。

在团队开发中,组件化带来的优势是便于协同开发,由于代码中的耦合度降低了,每个模块都可以分拆为一个组件,例如异步请求组件,路由组件,各个视图组件。
团队中每个人发挥所长维护各自组件,对整个应用来说是精细的打磨。

在Javascript 的开发中,组件化其实和模块化的意义相当,大概是根据功能、业务进行代码划分,使到这部分的代码可以被复用,例如 $、_ 这些工具库就是将功能进行模块化。
其实组件化的本质上和我们以往的模块化并无差别。
只不过模块化是对js进行了模块的打包,而一个组件包含了对应的(css,js,数据)

组件的规范

组件化的封装思路就是面向对象思想;

  1. 基本的封装特性
  2. 简单的生命周期(组件的创建,更新,卸载)
  3. 明确的数据流动(更具参数的不同做出不同的响应)

React组件构建

Web Components通过自定义元素的方式实现组件化,而React的本质就是关心元素的构成,React组件即为组件元素。组件元素被描述成纯粹的JSON对象,意味着可以使用方法或是类来构建。React组件基本由3个部分构成----属性(props)、状态(state)、以及生命周期方法。

React.createClass

用React.creatClass构建组件是React最传统,也是兼容性最好的方法。


const List = React.createClass({
getDefaultProps() {
return {
color : "#f00",
text : "我是列表"
}
}, render() {
const {color,test} = this.props;
return (
<li className={`btn btn-${color}`}>{test}</li>
)
}
})

调用的时候只需要<List/>,每一次调用都会被编译成React.createElement(List)方法来创建List实例,这意味着每次调用<List/>就会创建一次li;

ES6 class


import React, {Component} from 'react';
class List extends Component {
constructor(props) {
super(props)
} static defaultProps = {
color : "#f00",
text : "我是列表"
}; render() {
const {color,test} = this.props;
return (
<li className={`btn btn-${color}`}>{test}</li>
)
} }

无状态函数


function List({color="#f00",test="我是列表"}){
return (
<li className={`btn btn-${color}`}>{test}</li>
)
}

无状态函数构建的组件称为无状态组件,这种构建方式是0.14版本后新增的,官方推崇

在合适的情况下我们都应该使用这种组件方式。无状态组件不像上述两种方法在调用时会创建新实例,它创建时始终保持了一个实例,避免了不必要的检查和内存分配,做到了内存优化。

上一篇:react开发教程(二)安装
下一篇:react开发教程(四)React数据流

react开发教程(三)组件的构建的更多相关文章

  1. MIP开发教程(三) 使用MIP-CLI工具调试组件

    一 . 在 mip-extensions 仓库中创建新的组件 二 . 预览调试组件 三 . 在 MIP 页中引用自己编写的 MIP 组件 四 . 组件提交到 GitHub 仓库时需要进行校验 站长开发 ...

  2. Yii Framework 开发教程Zii组件-Tabs示例

    有关Yii Tab类: http://www.yiichina.com/api/CTabView http://www.yiichina.com/api/CJuiTabs http://blog.cs ...

  3. react开发教程(六)React与DOM

    ReactDOM findeDOMNode 语法:DOMElement findDOMNode(ReactComponent component)描述:获取改组件实例相对应的DOM节点 案例: imp ...

  4. 160921、React入门教程第一课--从零开始构建项目

    工欲善其事必先利其器,现在的node环境下,有太多好用的工具能够帮助我们更好的开发和维护管理项目. 我本人不建议什么功能都自己写,我比较喜欢代码复用.只要能找到npm包来实现的功能,坚决不自己敲代码. ...

  5. XAF应用开发教程(三)业务对象模型之引用类型与关联关系

    本节介绍信息系统开发中最常见的问题,引用关系,一对多关系,多对多关系. 以客户信息为例,客户通常需要客户分类,如VIP客户,普通客户,潜在客户.当然,我们可以定义枚举类型进行定义出这个类型,并在客户类 ...

  6. React学习笔记(三) 组件传值

    组件嵌套后,父组件怎么向子组件发送数据呢? 答案是: this.props <script type="text/babel"> var MyFirst = React ...

  7. Odoo 二次开发教程(三)-第一个Model及Form、Tree视图

    创建完我们的模块,接下来我们就要为我们的模块添加一些对象.今天我们将要创建一个学生对象(tech.student)和一些基本的属性,并将用form和tree视图将其展示出来: 一. 创建tech.st ...

  8. Boot-crm管理系统开发教程(三)

    (ps:前两章我们已经把管理员登录和查看用户的功能实现了,那么今天我们将要实现:添加用户,删除用户,和修改用户功能) 由于Cusomer的POJO类型已经写好了,所以这次我们之前从CustomerCo ...

  9. 开发教程(四) MIP组件平台使用说明

    组件审核平台用于上传 MIP 组件.经过自动校验之后,提交审核,通过审核的组件会定时推送到线上,供网站使用. 平台地址:https://www.mipengine.org/platform/ 1. 使 ...

随机推荐

  1. Leaflet:LatLng、LatLngBounds、Point、Bounds、Icon

    LatLng 代表一个有着确定经纬度坐标的地理点. 1.用例 var latlng = L.latlng(50.5,30.5); 所有Leaflet的方法中接收的LatLng参数均可以用数组[ ]或者 ...

  2. Django的models由数据库表生成

    Django的models由数据库表生成 参考文献:https://www.cnblogs.com/sukura/p/14306510.html 目的或效果:方便实现使用django原生的后台管理系统 ...

  3. 『现学现忘』Docker相关概念 — 2、云计算的服务模式

    目录 1.最底层的,就是IaaS 2.再往上,就是PaaS 3.继续往上,就是SaaS 4.IaaS.SaaS.PaaS三者之间的关系 上一篇文章详细介绍了什么是云计算: 云是一种服务,可以像使用水. ...

  4. 【C语言】关于单片机中断详解

    什么是中断?就是打断当前要做的事,转而去执行别的事情.比如小七我现在正在电脑前写帖子,突然老妈叫我帮她下楼拿点东西,于是我就收到了老妈给我的一个中断(可以叫做外部中断),当我去拿东西时,突然尿急(内部 ...

  5. JS-购物车

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. 36 异常机制 自定义异常 实际应用中的经验总结 尽量添加finally语句块去释放占用的资源

    自定义异常 概念 使用Java内置的异常可以描述在编辑时出现的大部分异常情况.除此之外,用户还可以自定义异常.用户自定义异常类,只需继承Exception类即可. 在程序中使用自定义异常类,大体可分为 ...

  7. Windows原理深入学习系列-信任等级检查

    这是[信安成长计划]的第 23 篇文章 0x00 目录 0x01 介绍 0x02 逆向分析 Win10_x64_20H2 0x03 WinDBG 0x04 参考文章 在之前的时候,一直以为 SACL ...

  8. Redis 中的 set 和 sorted set 如何使用,源码实现分析

    set 和 sorted set 前言 set 常见命令 set 的使用场景 看下源码实现 insert dict sorted set 常见的命令 使用场景 分析下源码实现 ZADD ZRANGE ...

  9. 6月29日学习总结 Django自带的用户认证

    Django自带的用户认证 我们在开发一个网站的时候,无可避免的要设计.实现网站的用户系统.此时我们需要实现包括但不限于用户注册.用户登录.用户认证.注销.修改密码等功能,这还真是个麻烦的事情呢. D ...

  10. 手把手带你使用ZigBee——通过爱智控制EFR32,以及 Simplicity Studio 使用过程中注意事项

    前言 兄弟们,我发现一个有意思的东西,我在爱智官网翻资料的时候,发现他们终于终于把官网文档的索引优化了!有一说一,真是方便不少,终于不再是一堆文档糊在一坨了. 另外我还发现他们居然做了一个EFR32的 ...