Diferencia React / es6 entre las exportaciones, creaClase y extiende el Componente

Estoy empezando con reactjsr y es6 y tratando de determinar la diferencia real entre

export const Voting = React.createClass({ ... }) 

y

 class Voting extends React.Component { ... } 

Parece que puedo lograr el mismo efecto deseado con ambos (a menos que sea un error, por supuesto). Creo que preferiría el segundo formato si no hubiera diferencia, pero parece que no puedo entender cuál es la verdadera diferencia. Agradecería cualquier y todos los comentarios, gracias!

De la publicación del blog que anunció el apoyo de clase ES6 :

JavaScript originalmente no tenía un sistema de clase incorporado. Cada marco popular construyó su propio, y nosotros también. Esto significa que tienes un aprendizaje semántico ligeramente diferente para cada marco.

Pensamos que no estamos en el negocio de diseñar un sistema de clase. Solo queremos usar la forma idiomática de JavaScript de crear clases.

En React 0.13.0 ya no necesita usar React.createClass para crear componentes React. Si tienes un transpiler puedes usar las clases de ES6 hoy.

Entonces, ambos hacen lo mismo (definir un componente React), pero las clases ES6 son la forma más nativa de hacerlo (no hay un código React personalizado) y, como tal, es mucho más fácil razonar sobre el código. Esta debería ser la forma preferida de crear componentes React.

Sin embargo, hay dos diferencias notables entre las clases React.createClass y ES6 (también mencionadas en esa publicación del blog):

  • Encuadernación automática : React.createClass vincula todos los métodos a la instancia actual. Con las clases de ES6 tienes que hacerlo tú mismo.

  • Mixins : las clases de ES6 no tienen soporte directo para mixins como React.createClass hizo.