容器型组件(container component)

  • 含有抽象数据而没有业务逻辑的组件
  • 负责管理数据和业务逻辑,不负责 UI 的呈现
  • 带有内部状态

展示型组件(presentational component)

  • 只负责 UI 的呈现
  • 没有状态(即不使用this.state这个变量),一般可以写成无状态组件,但也可以不是,展示型组件也可以拥有自己的生命周期
  • 所有数据都由参数(this.props)提供

把网络请求 + 列表展示的组件拆分成以上的容器型组件 + 展示型组件:

  在容器组件中访问网络,有结果之后执行setState,在render中使用展示型组件,网络请求来的列表通过propos传递给展示型组件。

  展示型组件中仅仅获取propos来展示数据,而没有state(无状态组件,所以展示型组件可以用function来创建)

以上完成了组件的初步拆分。但是可能有多个组件中都有异步请求,所以必须把异步请求从组件中独立抽取出来,在容器组件上多抽出来一层专门处理异步请求的网络组件。

  这个网络组件或称为高阶组件,用于增强组件。实现过程:采用属性劫持。一个函数接收一个组件A,返回另一个组件B。B的props接收一个promise,didMount中对这个promise进行回调注册(ps:这里可能需要看一下下面的promise解释),有结果后进行setState,render中调用A,props传入网络数据,到了A中直接获取数据展示即可。

总结以上过程:

  第一次抽取:把组件中的网络请求与展示逻辑拆分,分为container和list组件

  第二次和第一次类似,继续对container进行网络请求和容器的拆分,分为netWrapper和container组件。到这一步container可以从propos中获取网络数据,也可以拥有自己的state,而list和container的关系可以认识,list把自己的状态都交给了container来管理,list仅仅用于展示,这里有点类似于controller view 模式。

补充以上的promise解释:

对于一个状态已经变化完毕的promise,后续任何时候对这个promise进行函数注册,都会马上被执行,而且可以多次执行,下面代码输出两个ok

var p = new Promise(function(resolve,reject){
resolve("ok")
}); setTimeout(function(){
p.then(function (data) {
console.log(data)
});
},100); setTimeout(function(){
p.then(function (data) {
console.log(data)
});
},1000);

react 组件架构的更多相关文章

  1. React 组件开发初探

    react.js 在线地址:http://slides.com/yueyao/deck/#/ COMPONENT JSX 预编译语言, 一个基于ECMAscript 的xml-link 的语法扩展,最 ...

  2. React组件开发入门

    React 组件开发入门 Introduction 本文组成: Ryan Clark文章Getting started with React的翻译. 博主的实践心得. React由Facebook的程 ...

  3. React 组件间通讯

    React 组件间通讯 说 React 组件间通讯之前,我们先来讨论一下 React 组件究竟有多少种层级间的关系.假设我们开发的项目是一个纯 React 的项目,那我们项目应该有如下类似的关系: 父 ...

  4. React组件设计

    React组件设计 组件分类 展示组件和容器组件 展示组件 容器组件 关注事物的展示 关注事物如何工作 可能包含展示和容器组件,并且一般会有DOM标签和css样式 可能包含展示和容器组件,并且不会有D ...

  5. React组件设计(转)

    React组件设计 组件分类 展示组件和容器组件 展示组件 容器组件 关注事物的展示 关注事物如何工作 可能包含展示和容器组件,并且一般会有DOM标签和css样式 可能包含展示和容器组件,并且不会有D ...

  6. 设计 react 组件

    重新设计 React 组件库 诚身 7 个月前   在 react + redux 已经成为大部分前端项目底层架构的今天, 让我们再次回到软件工程界一个永恒问题的探讨上来, 那就是如何提升一个开发团队 ...

  7. React组件设计技巧

    React组件设计 组件分类 展示组件和容器组件 展示组件 容器组件 关注事物的展示 关注事物如何工作 可能包含展示和容器组件,并且一般会有DOM标签和css样式 可能包含展示和容器组件,并且不会有D ...

  8. React 组件性能优化探索实践

    转自:http://www.tuicool.com/articles/Ar6Zruq React本身就非常关注性能,其提供的虚拟DOM搭配上Diff算法,实现对DOM操作最小粒度的改变也是非常的高效. ...

  9. webpack 打包一个简单react组件

    安装Webpack,并加载一个简单的React组件 全局的npm模块安装: npm install -g webpack 安装jsx-loader npm install --save-dev jsx ...

随机推荐

  1. 单片机的C语言中位操作用法

    在对单处机进行编程的过程中,对位的操作是经常遇到的.C51对位的操控能力是非常强大的.从这一点上,就可以看出C不光具有高级语言的灵活性,又有低级语言贴近硬件的特点.这也是在各个领域中都可以看到C的重要 ...

  2. MySQL习题1 一对多实例 产品和分类

    /* 需求:建立产品和分类表 1.查询每种分类的产品数量,没有产品的分类也要统计.(cname,quantity) 2.根据分类名称查询分类中的所有产品 */ -- ----------------- ...

  3. [未读]深入浅出node.js

    还没看过,据说很多内容来自国外译文.

  4. H5存储

    1.localstorage ① 500万字符限制② 一般存储ajax请求返回数据,并且需要设置过期时间③ 具有清理机制,将过期数据清理④ 不存储敏感信息⑤ 不存储SEO依赖数据,至少不能严重依赖⑥ ...

  5. 如何理解linux多用户多任务

    Linux 的单用户.多任务: 容易理解. Linux 的多用户.多任务 举个例子,比如LinuxSir.Org 服务器,上面有FTP 用户.系统管理员.web 用户.常规普通用户等.在同一时刻,比如 ...

  6. HTML 5的革新——语义化标签(一)HTML 5的革新——语义化标签(二)

    HTML 5的革新之一:语义化标签一节元素标签. 在HTML 5出来之前,我们用div来表示页面章节,但是这些div都没有实际意义.(即使我们用css样式的id和class形容这块内容的意义).这些标 ...

  7. leetcode128 Longest Consecutive Sequence

    思路: 维护一个unordered_map,key是每个连续区间的端点,value是该区间的长度. 实现: class Solution { public: int longestConsecutiv ...

  8. 详解HTML中的表格标签

    详细代码如下: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" ...

  9. 带有res资源文件的项目 需要导成jar包 供别人使用的解决方法

    比如说自己的成品项目,名字是MyObject,需要导出成jar包,让别人的项目调用,但是自己的项目还包含有图片.layout布局.libs里面的依赖包等等: 步骤: 1.MyObject项目需要“is ...

  10. copyin函数

    详见:http://pic.dhe.ibm.com/infocenter/aix/v6r1/index.jsp?topic=%2Fcom.ibm.aix.kerneltechref%2Fdoc%2Fk ...