JS -- Immutable.js & React & Redux
来源:互联网 发布:php商品管理系统 编辑:程序博客网 时间:2024/05/16 18:56
乱入的Docker
Docker是一个开源工具,能将一个WEB应用封装在一个轻量级,便携且独立的容器里,然后可以运行在几乎任何服务环境下。
Docker的容器能使应用跑在任何服务器上并且表现一致。一个开发者在笔记本上建立的一个容器,能跑在很多环境下,如:测试环境,生产环境,虚拟机上,VPS,OpenStack集群,公用的电脑等等。
Docker的一般使用在以下几点:
1 自动化打包和部署应用
2 创造一个轻量级的,私人的 PAAS 环境
3 自动化测试和连续的 整合/部署
4 部署WEB应用,数据库和后端服务
下面开始正题
JS中的对象,由于使用了引用赋值,新的对象只是简单的指向了原始对象,所以两个对象的操作会互相影响。
foo={a: 1}; bar=foo; bar.a=2
这时,foo bar的a都变成了2。当应用复杂的时候,这样的操作会存在很大的隐患。为了解决这个问题,我们引入Immutable。
Immutable对象的最大特点就是,一旦被创建,就不能再被修改。任何试图对Immutable对象的修改操作都会返回一个新的Immutable对象,而原对象不会改变。
Immutable 实现的原理是 Persistent Data Structure(持久化数据结构),也就是使用旧数据创建新数据时,要保证旧数据同时可用且不变。同时为了避免 deepCopy 把所有节点都复制一遍带来的性能损耗,Immutable 使用了 Structural Sharing(结构共享),即如果对象树中一个节点发生变化,只修改这个节点和受它影响的父节点,其它节点则进行共享。
原理动画:
http://img.alicdn.com/tps/i2/TB1zzi_KXXXXXctXFXXbrb8OVXX-613-575.gif
原文链接:
https://zhuanlan.zhihu.com/purerender/20295971
immutable.js
immutable.js 是流行的 Immutable 库。其中,最重要的三种数据结构是:
Map:键值对集合,对应于 Object,ES6 也有专门的 Map 对象List:有序可重复的列表,对应于 ArraySet:无序且不可重复的列表
代码示例:
// immutable.jsimport Immutable from 'immutable';foo = Immutable.fromJS({a: {b: 1}}); // fromJS方法bar = foo.setIn(['a', 'b'], 2); // 使用 setIn 赋值console.log(foo.getIn(['a', 'b'])); // 使用 getIn 取值,打印 1console.log(foo === bar); // 打印 false
let map1 = Immutable.Map({a:1, b:1, c:1});let map2 = Immutable.Map({a:1, b:1, c:1});map1 === map2; // falseImmutable.is(map1, map2); // true
实践
1、与React搭配,在shouldComponentUpdate返回false来避免不必要的渲染。
2、与Redux搭配,设置Store。
- JS -- Immutable.js & React & Redux
- react+redux+router+webpack+immutable.js框架
- Immutable.js与React和Redux实践
- Immutable.js 以及在 react+redux 项目中的实践
- 基于React-Native及Redux的Immutable.js引入
- 基于React-Native及Redux的Immutable.js引入
- kraken.js+react+redux+webpack实践
- react.js框架Redux:初步认识
- immutable.js
- Immutable.js
- immutable-js
- Immutable.js和JS
- React引用数据类型与immutable.js的使用实例
- 基于 React.js + Redux + Bootstrap 的 Ruby China 示例
- rn+redux+immutable+saga+react-navigation技术栈
- React Redux router Immutable Es6等框架学习要点整理
- Immutable.js 使用总结
- JS中的Immutable
- php判断元素是否在二维数组中
- 测试
- JSONP跨域问题
- information_schema系统表——EVENTS
- shell 讲字符串当命令将输出写入文件,并处文件中读出来
- JS -- Immutable.js & React & Redux
- kaufman adaptive moving average
- jupyternotebook 解压文件
- linux shell 99乘法表
- 学的几个简单的SQL语句
- NSWindow 直接加载NSViewController
- HBase源码系列(三)HMaster启动过程
- Windows错误码大全
- ios 弹出视图全屏遮盖 与 ios7以后的导航栏遮盖view问题