ES6 React组件中的PureRenderMixin

时间:2015-08-21 20:46:29

标签: javascript reactjs ecmascript-6

有没有办法在React ES6类组件中包含mixin? (即extends React.Component)?如果是这样,官方的做法是什么?

我想将PureRenderMixin包含在我的一个具有不可变状态的组件中,以加快差异化过程。

4 个答案:

答案 0 :(得分:14)

https://facebook.github.io/react/docs/shallow-compare.html

  

shallowCompare是实现相同功能的辅助函数   将ES6类与React一起使用时,作为PureRenderMixin的功能。

import shallowCompare from 'react-addons-shallow-compare';

export default class SampleComponent extends React.Component {

  shouldComponentUpdate(nextProps, nextState) {
    // pure render
    return shallowCompare(this, nextProps, nextState);
  }

  render() {
    return <div className={this.props.className}>foo</div>;
  }
}
Source code的{p> PureRenderMixin是:

var ReactComponentWithPureRenderMixin = {
  shouldComponentUpdate: function(nextProps, nextState) {
    return shallowCompare(this, nextProps, nextState);
  },
};

因此,当您使用PureRenderMixin时,实际上使用shallowCompare

更新15.3.0

  

添加React.PureComponent - 一个新的基类来扩展,现在替换react-addons-pure-render-mixin,因为mixin不适用于ES2015类。

答案 1 :(得分:12)

在ES6风格的React类中通常有两种mixin解决方案:

  1. 创建更高阶的组件(例如here
  2. 如果您愿意在Babel中启用早期ES7提案(例如here
  3. ,请使用装饰器

    我还没有真正尝试过我为#2链接过的图书馆,但装饰师却把我视为mixins的优雅替代品。

答案 2 :(得分:0)

答案 3 :(得分:0)

如果我想在我的es6 react组件中使用mixins,我会使用react-mixin,但我没有使用PureRenderMixin尝试此库。