一、需求

1.子组件有更新时,只重新渲染有变化的子组件,而不是全部

二、ImmutableJS原理

三、代码

1.CheckboxWithLabel.jsx

 var React = require('react/addons');
var CheckboxWithLabel = React.createClass({
shouldComponentUpdate: function(nextProps, nextState) {
return nextProps.label !== this.props.label;
},
onChange: function() {
this.props.onChange(this.props.label.get("id"));
},
render: function() {
return (
<label>
{this.props.label.get("text")}
<input type = "checkbox" checked={this.props.label.get("checked")} onChange={this.onChange}/>
{this.props.label.get("checked") ? this.props.label.get("on") : this.props.label.get("off")}
</label>);
}
}); module.exports = CheckboxWithLabel;

2.SurveyList.jsx

 var React = require('react/addons');
var Immutable = require('immutable');
var CheckboxWithLabel = require('./CheckboxWithLabel.jsx') var SurveyList = React.createClass({
mixins: [React.addons.PureRenderMixin],
getInitialState: function() {
return Immutable.fromJS({
items: [
{
id: 0,
text: "你喜欢吃萝卜吗?",
on: "喜欢",
off: "不喜欢",
checked: false
},
{
id: 1,
text: "你喜欢吃西瓜吗?",
on: "喜欢",
off: "不喜欢",
checked: false
},
{
id: 2,
text: "你喜欢吃香蕉吗?",
on: "喜欢",
off: "不喜欢",
checked: false
}
]
});
},
onChange: function(labelId) {
var newState = this.state.setIn(["items", labelId, "checked"], !this.state.getIn(["items", labelId, "checked"]));
this.replaceState(newState);
},
render: function() {
var that = this;
return (
<div>
{
this.state.get("items").map(function(label) {
return <div><CheckboxWithLabel label={label} onChange={that.onChange.bind(that)}></CheckboxWithLabel></div>
})
}
</div>);
}
}); module.exports = SurveyList;

3.app.jsx

 var React = require('react/addons');
var SurveyList = require('./SurveyList.jsx'); React.render(<SurveyList></SurveyList>, document.body);
Perf = React.addons.Perf;

四、运行结果

React-用ImmutableJS提高性能的更多相关文章

  1. ASP.NET MVC之如何看待内置配置来提高性能优化(四)

    前言 前几篇我们比较基础的讲了下MVC中的知识,这一节我们穿插点知识,讲讲MVC中我们可以提高性能的办法. Razor视图引擎优化(优化一) 我们知道默认情况下配置MVC去解析一个视图会首先约定通过查 ...

  2. CSS性能分析,如何优化CSS提高性能

    不负十年后的自己,共勉! 前端性能优化一直是一个比较热门的话题,我们总是在尽我们最大的努力去,提高我们的页面性能,比如减少HTTP请求,利用工具对资源进行合并压缩,脚本置底,避免重复请求,css sp ...

  3. 对于大批量赋值功能,使用if判断是否能提高性能

    场景: 如果对某变量进行赋值,是否需要判断一下,如果相等就不用赋值,这样会不会提高性能. 代码如下: "; "; , x2=, x3=; Stopwatch w = new Sto ...

  4. Java编程提高性能时需注意的地方

    1.尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面 第一,控制资源的使用,通过线程同步来控制资 ...

  5. 使用C# yield关键字来提高性能和可读性

    对于”yield”这个关键字我已经见过N次了,直到最近我才知道这个关键字所蕴含的力量.我将在下面展示出一些使用”yield”让你的代码有更高可读性和更好性能的例子. 为了让你对yield有一些快速概览 ...

  6. 使用WITH AS提高性能简化嵌套SQL(转载)

    使用WITH AS提高性能简化嵌套SQL http://www.cnblogs.com/fygh/archive/2011/08/31/2160266.html

  7. Java 编程:如何提高性能?(简单总结篇)

    开发者在编程中除了要有编程规范,还要注意性能,在 Java 编程中有什么提高性能的好办法呢? 本文转自国内 ITOM 行业领军企业 OneAPM Cloud Insight(一款能够优雅监控多种操作系 ...

  8. 05_Smart-image通过SoftReference提高性能

    文章导读: 文件介绍了常见的图片下载开源插件smart-image, 由于移动设备硬件受限,因此Android的相关app都要考虑到性能的关系, 所以很多的第三方插件都使用到了缓存cache技术,本人 ...

  9. FMDB官方使用文档-GCD的使用-提高性能(翻译)

    FMDB官方使用文档-GCD的使用-提高性能(翻译) 发布于:2013-08-19 10:01阅读数:13395 由于FMDB是建立在SQLite的之上的,所以你至少也该把这篇文章从头到尾读一遍.与此 ...

  10. Java编程中提高性能的几点建议

    尽量减少对变量的重复计算 如 for(int i=0;i<list.size();i++) 应该改为 for(int i=0,len=list.size();i<len;i++) 并且在循 ...

随机推荐

  1. 关于PHP Websocket 错误: "stream_select(): You MUST recompile PHP with a larger value of FD_SETSIZE" 的解决方案

    最近在使用Ratchet (一个PHP websocket框架)改造一个PHP网站的时候,出现了错误: "It is set to 1024, but you have descriptor ...

  2. django_auth_ldap

    使用django_auth_ldap来实现ldap和django自己的认证系统auth 下载插件 python-ldap和django_auth_ldap 配置settings.py 一些基本说明: ...

  3. Windows7 sp1 64位下安装配置eclipse+jdk+CDT+minGW

    需要的工具: jdk-7u11-windows-x64.exe  eclipse-SDK-4.2.2-win32-x86_64.zip cdt-master-8.1.2.zip mingw-get-i ...

  4. CrossDomain.xml的作用及其简单用法

    使用crossdomain.xml让Flash可以跨域传输数据 本文来自http://www.mzwu.com/article.asp?id=975 一.概述 位于www.mzwu.com域中的SWF ...

  5. Python默认模块 os和shutil 实用函数

    os.sep 可以取代操作系统特定的路径分隔符.windows下为 '\\' os.name 字符串指示你正在使用的平台.比如对于Windows,它是'nt',而对于Linux/Unix用户,它是 ' ...

  6. constructor(构造器)

    当我们创建一个类的时候,如果不自定义构造器,则系统会自动创建一个默认的构造器,也是一个无参构造器用于初始化. 当我们在类的里面创建了自己的构造器,则系统将不会创建默认的构造器,由于需求条件不同,构造器 ...

  7. Converting Storyboard from iPhone to iPad

    I found out a kind of solution: Duplicate your iPhone-Storyboard and rename it MainStoryboard_iPad.s ...

  8. MITK Tutorial (三)

    Step 2: Use the template with the plugins to read a image 在exampleplugin插件中QmitkAwesomeView.cpp中添加头文 ...

  9. How to avoid C# console applications from closing automatically.

    One way is to interop it with msvcrt.dll You can pinvoke this C function into your C# application. T ...

  10. 基于Pre-Train的CNN模型的图像分类实验

    基于Pre-Train的CNN模型的图像分类实验  MatConvNet工具包提供了好几个在imageNet数据库上训练好的CNN模型,可以利用这个训练好的模型提取图像的特征.本文就利用其中的 “im ...