React-用ImmutableJS提高性能
2015-12-20 21:00
447 查看
一、需求
1.子组件有更新时,只重新渲染有变化的子组件,而不是全部
二、ImmutableJS原理
三、代码
1.CheckboxWithLabel.jsx
2.SurveyList.jsx
3.app.jsx
四、运行结果
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 Jest测试
- React如何性能调优
- React 性能调优原理
- React使用rAF动画介绍
- React用JS 模拟动画介绍
- 如何在React中使用CSS3动画
- java识别验证码-用tess4j实现超简单调用tessreact-orc来破解验证码
- React表单组件自定义-可控及不可控组件
- 大神眼中的React Native--备用
- React事件处理函数的bind复用和name复用
- React表单元素的使用
- ReactJS学习笔记(三)
- 用ReactJS和Python的Flask框架编写留言板的代码示例
- 用ReactJS和Python的Flask框架编写留言板的代码示例
- React可控组件与不可控组件
- React组件-mixin
- React-组件嵌套-子组件通过委托向父组件传值
- react-native 布局
- 如何创建一个Android原生的react-native组件(一)
- ReactiveCocoa源码拆分解析(一)