2016-03-16 17 views
7

Ich habe vor kurzem die Freude der staatenlosen Komponenten entdeckt. Zum Beispiel macht dies sehr glücklich, mich (und es funktioniert):Arrow Funktionssyntax in Stateless Komponenten reagieren

import { Component, PropTypes } from 'react'; 

export default function ClassroomsOverview(props, context) { 
    return (
    <div> 
     <p>{context.classrooms.data.length} Classrooms.</p> 
     <p>{context.classrooms.members.length} Students</p> 
    </div> 
); 
} 

ClassroomsOverview.contextTypes = { 
    classrooms: PropTypes.object 
} 

ich wäre noch glücklicher, wenn ich die gleiche Komponente der Arbeit mit E6 arrow function syntax machen könnte, etwa so:

import { Component, PropTypes } from 'react'; 

const ClassroomsOverview = (props, context) => (
    <div> 
     <p>{context.classrooms.data.length} Classrooms.</p> 
     <p>{context.classrooms.members.length} Students</p> 
    </div> 
); 

ClassroomsOverview.contextTypes = { 
    classrooms: PropTypes.object 
} 

Ich habe gefolgt this video, aber ich kann nicht die Pfeil-Syntax-Version zu arbeiten.

Kann jemand bitte darauf hinweisen, was ich falsch mache?

+1

Im zweiten Beispiel (das gewünschte) exportieren Sie die const-Funktion nicht. –

+0

@NikosParaskevopoulos Ich habe versucht, 'export default' vor' const' hinzuzufügen, aber ich bekomme einen Compilerfehler. –

+1

Der 'export default' ist ein * Operator *, der einen Ausdruck als Argument verwendet ([ref] (http://exploringjs.com/es6/ch_modules.html#_importing-and-exporting-in-detail)); du könntest also 'export default (requisiten, kontext) => ....;' verwenden. Andernfalls können Sie 'const ClassroomsOverview = (Requisiten, Kontext) => ....;' exportieren, aber dies ist ein * benannter * Export, nicht der Standard. Ich stimme Bergi zu, benutze die 'export default function'-Syntax. –

Antwort

6

Sie vermissen die export Deklaration. Fügen Sie diese auf Ihrem Modul:

export {ClassroomsOverview as default} 

ich aber die export default Syntax mit der Funktionsdeklaration verwenden würde empfehlen.

+0

Danke, ich dachte, ich hätte etwas offensichtlich übersehen. Wenn ich 'export default' vor 'const' addiere, erhalte ich einen Compilerfehler. Vielleicht verstehe ich deinen Vorschlag falsch. Könnten Sie bitte expliziter sein? –

+2

'export default const X = ...;' * ist * ein Syntaxfehler. Es wird nicht unterstützt. Sie können 'export default ...;' nur mit dem Wert, aber nicht mit einer 'const'-Deklaration ausführen. Siehe auch [diese Antwort] (http://stackoverflow.com/a/34107388/1048572) – Bergi

+0

Meine Empfehlung war für Ihr erstes, bereits funktionierendes Snippet ohne die Pfeilfunktion. – Bergi

Verwandte Themen