- React性能优化总结
- React 性能工程(上)
- React性能工程(下) – 深入研究React性能调试
- Immutable.js 以及在美团 react+redux 项目中的实践
- 更优雅的编写 React 组件 —— stateless functions
Immutable 则提供了简洁高效的判断数据是否变化的方法,只需 === 和 is 比较就能知道是否需要执行 render(),而这个操作几乎 0 成本,所以可以极大提高性能。修改后的 shouldComponentUpdate 是这样的:
import { is } from 'immutable';
shouldComponentUpdate: (nextProps = {}, nextState = {}) => {
const thisProps = this.props || {}, thisState = this.state || {};
if (Object.keys(thisProps).length !== Object.keys(nextProps).length ||
Object.keys(thisState).length !== Object.keys(nextState).length) {
return true;
}
for (const key in nextProps) {
if (!is(thisProps[key], nextProps[key])) {
return true;
}
}
for (const key in nextState) {
if (thisState[key] !== nextState[key] || !is(thisState[key], nextState[key])) {
return true;
}
}
return false;
}
react-immutable-render-mixin
这是一个facebook/immutable-js的react pure render mixin 的库,可以简化很多写法。
使用 react-immutable-render-mixin 可以实现装饰器的写法。
import React from 'react';
import { immutableRenderDecorator } from 'react-immutable-render-mixin';
@immutableRenderDecorator
class Test extends React.Component {
render() {
return <div></div>;
}
}
无状态组件
为了避免一定程度的浪费,react官方还在0.14版本中加入了 无状态组件 ,如下:
// es6
const HelloMessage = (props) => <div>Hello {props.name}</div>;