2015-08-21 17 views
9

Czy istnieje sposób na dodanie mixina do komponentu klasy React ES6? (tj. extends React.Component)? Jeśli tak, jaki jest oficjalny sposób robienia tego?PureRenderMixin w komponencie reagującym na ES6

Chciałbym dołączyć PureRenderMixin w jednym z moich komponentów, który ma niezmienny stan, aby przyspieszyć proces porównywania.

Odpowiedz

12

Są zazwyczaj dwa rozwiązania wstawek w ES6 stylu React klasy:

  1. Tworzenie komponentu wyższego rzędu (np here)
  2. Użyj dekorator jeśli” gotowi włączyć wczesne propozycje ES7 w Babel (np. here)

Ja właściwie nie trie d biblioteka, do której dołączyłem, na # 2, ale dekoratorzy uderzają mnie jako elegancki zamiennik dla mixinów.

+0

doceniam to robisz badania dla mnie :) –

0

Używam react-mixin, jeśli chcę mieć mixy w moich składnikach reagujących na es6, ale nie wypróbowałem tej biblioteki z PureRenderMixin.

14

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

shallowCompare jest funkcja pomocnika, aby osiągnąć tę samą funkcjonalność jako PureRenderMixin podczas korzystania z klas ES6 React.

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 od PureRenderMixin jest:

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

Więc, kiedy użyć PureRenderMixin, faktycznie korzysta shallowCompare

UPDATE 15.3.0:

Dodaj React.PureComponent - nowa klasa podstawowa do rozszerzenia, zastępująca react-addons-pure-render-mixin teraz, gdy mixiny nie działają z klasami ES2015.

+0

Czym dokładnie jest diff od __can__ użyć 'PureRenderMixin' z' es6'? – Tjorriemorrie

+0

@Tjorriemorrie, Jeśli mówisz o kodzie takim jak 'this.shouldComponentUpdate = PureRenderMixin.shouldComponentUpdate.bind (this);' in constructor, to po prostu inny sposób użycia 'shallowCompare' addone. Zobacz https://github.com/facebook/react/blob/v15.0.0/src/addons/ReactComponentWithPureRenderMixin.js#L41-L43 –

Powiązane problemy