iT邦幫忙

DAY 24
1

Reactjs 30 天邊做邊學系列系列 第 24

Reactjs Day 24 - PureRenderMixin

  • 分享至 

  • xImage
  •  

PureRenderMixin
如果您的 React 元件的 render 函式非常單純(相對來說,就只是單純想把 props 和 state 輸出),您就可以使用 PureRenderMixin 來提升效能:

var PureRenderMixin = require('react').addons.PureRenderMixin;
React.createClass({
  mixins: [PureRenderMixin],

  render: function() {
    return <div className={this.props.className}>foo</div>;
  }
});

內部的 mixin 幫您實作了 shouldComponentUpdate ,他會幫您比對 propsstate ,只要一樣就回傳 false
協助您快速提升一些效能:

/**
 * @jsx React.DOM
 */
var PureRenderMixin = React.addons.PureRenderMixin;
var iPhone = React.createClass({
  mixins: [PureRenderMixin],
  getDefaultProps: function () {
    return {className: 'red'}
  },
  handleClick: function () {
    this.setProps({className: 'blue'});
    console.log('excute handle click');
  },
  render: function() {
    console.log('I am rendering now...');
    return <div className={this.props.className} onClick={this.handleClick}>foo</div>;
  }
});

React.renderComponent(
  <iPhone />,
  document.getElementById('example')
)

注意:
關於比對方面,React 只為您執行淺層的比對。意思是如果您的資料結構非常複雜可能 shouldComponentUpdate() 可能永遠判斷兩個物件為 true,因為他只做淺層比對,有可能是只比較參考。
所以建議您使用單純屬性和狀態或使用強制更新 forceUpdate() 當你知道這個資料結構太複雜的時候。
此外,shouldComponentUpdate 會略過子元件的更新,所以請確保所有的東西是真的很單純!


上一篇
Reactjs Day 23 - 便利的輔助方法 - 不變性的輔助函式(Immutability Helpers)
下一篇
Reactjs Day 25 - 效能檢測工具
系列文
Reactjs 30 天邊做邊學系列30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言