react项目组件化思考
三个原则
- single store
- render from top
- immutable data
single store,便于组件之间通信。
render from top,因为store就一个,每次修改后,从最顶层开始渲染,依赖DOM diff和人工shouldComponentUpdate判断来提高渲染性能。
immutable data,当你使用第三方组件,为了防止他内部对你的single store进行黑箱子修改操作,所以你可以传入immutable data给他。根据第三方组件的回调结果,自己来控制是否更改single store。
组件类型
通用基础组件
两种实现方式。
一,纯依赖props(无state),可通过forceUpdate来更新自己。
二,有依赖state,通过componentwillreciveprops生命周期函数接受props,来更新state。
业务基础组件
相当于业务树的叶节点。如需复用,构建方式同通用基础组件二。
业务路由组件
相当于业务树的枝节点。也是业务基础组件的容器。负责路由父组件的props给子组件(业务路由组件或业务基础组件)。
增删查改
方式一:
增
填写数据,验证数据,插入数据,重新查询数据列表。删
确认删除,重新查询数据列表。查
展现页数,展现条数。实际就是对总页数进行分页。改
填写数据,验证数据,更新数据,重新查询数据列表。
方式二:
适用于数据量不大的情况。
增删查改,都使用同一套数据。
思考
树
DOM用树表达,样式也可以用树表达,那么组件UI状态State,Store,Actions呢?
为什么都用树表达?是为了一个组件的DOM,样式,State,Store,Actions能互相对应。
五树合一,网页我有。业务组件的通信
因为是一个store,业务组件里也基本不会有props,state。直接从一个store里增删查改数据,从而实现业务组件的通信。第三方组件
使用设计不当的第三方组件,小心它对你正常业务代码的分离。
react项目组件化思考的更多相关文章
- 移动web端的react.js组件化方案
背景: 随着互联网世界的兴起,web前端开发的方式越来越多,出现了很多种场景开发的前端架构体系,也对前端的要求日益增高,早已经不是靠一个JQuery.js来做前端页面的时代了,而今移动端变化最大,近 ...
- React 面向组件化编程 - 封装了webpack - npm run build 产生的包的 /static 引用路径问题
React 面向组件化编程 面向对象 ----> 面向模块 ----> 面向组件 套路: 注意: 组件名必须大写开头: 只能有一个根标签: <input />虚拟DOM 元素必 ...
- CSS组件化思考
为什么组件化? 分层设计,代码复用,减少冗余: 维护方便,弹性好: 如何组件化? 目前代码分成三级: 第一级粒度最细,是基础,主要包含字体配置,颜色配置,UI框架(比如MUI或者pure.css): ...
- React: 研究React的组件化
一.简介大概 在以往的Web开发中,会把web页面所有的复杂控件作为一个单一的整体进行开发,由于控件之间需要进行通信,因此不同的组件之间的耦合度会很多,由于开发一个控件的时候要考虑到控件与控件之间的联 ...
- React的组件化
所谓组件,即封装起来的具有独立功能的UI部件.React推荐以组件的方式去重新思考UI构成,将UI上每一个功能相对独立的模块定义成组件,然后将小的组件通过组合或者嵌套的方式构成大的组件,最终完成整体U ...
- 组件化和 React
一,对组件化的理解 1,组件的封装 -视图 -数据 -变化逻辑(数据驱动视图变化) 例: import React, { Component } from 'react'; import List f ...
- iOS 从零到一搭建组件化项目框架
随着公司业务需求的不断迭代发展,工程的代码量和业务逻辑也越来越多,原始的开发模式和架构已经无法满足我们的业务发展速度了,这时我们就需要将原始项目进行一次重构大手术了.这时我们应该很清晰这次手术的动刀口 ...
- 【前端知识体系-JS相关】组件化和React
1. 说一下使用jQuery和使用框架的区别? 数据和视图的分离,(jQuery数据和视图混在一起,代码耦合)-------开放封闭原则 以数据驱动视图(只关注数据变化,DOM操作被封装) 2.说一下 ...
- Cocoapods组件化之搭建组件化项目框架
一,概述 随着公司业务需求的不断迭代发展,工程的代码量和业务逻辑也越来越多,原始的开发模式和架构已经无法满足我们的业务发展速度了,这时我们就需要将原始项目进行一次重构大手术了.这时我们应该很清晰这次手 ...
随机推荐
- response的Writer输出数据的问题
package cn.itcast.response; import java.io.IOException; import java.io.OutputStream; import java.io. ...
- [办公自动化]一次制作、多场合多次使用的PPT
面试或汇报总结时,你可能需要制作一份PPT来介绍自己.但是这些场合你不一定能讲完所有的内容. 你可以尝试分1分钟.3分钟.5分钟.10分钟的版本来准备. 使用同一份PPT. 没错. 在office20 ...
- bash 常用操作
删除不为空的文件夹 rm -rf dir_name
- DDoS deflate+iptables防御轻量级ddos攻击
一.查看攻击者ip #netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n 二.安装ddos deflate ...
- Spark1.6.2 java实现读取txt文件插入MySql数据库代码
package com.gosun.spark1; import java.util.ArrayList;import java.util.List;import java.util.Properti ...
- node crypto md5加密,并解决中文不相同的问题
在用crypto模块时碰到了加密中文不相同的问题,多谢群里面@蚂蚁指定 1:解决中文不同的问题 function md5Pay(str) { str = (new Buffer(str)).toStr ...
- [转]倍数提高工作效率的 Android Studio 奇技
转自:http://android.jobbole.com/81687/ 倍数提高工作效率的 Android Studio 奇技 2015/10/08 · 技术分享 · 4 评论· Android S ...
- angularJ表单验证
常用的表单验证指令 1. 必填项验证 某个表单输入是否已填写,只要在输入字段元素上添加HTML5标记required即可: <input type="text" requir ...
- MVC 发布
发布为局域网可用:以IP地址访问 安装IIS 发布 出现的错误: 处理程序"BlockViewHandler"在其模块列表中有一个错误模块"ManagedPipeline ...
- R&&rstudio
R sudo apt-get install R-base Rstudio()下载Rstudio桌面版失败 sudo apt-get install gdebi-core 如果提示少了什么东西,运行下 ...