2016-03-16 21 views
7

Recentemente ho scoperto la gioia dei componenti senza stato. Per esempio, questo mi rende molto felice (e funziona):Sintassi della funzione di freccia nei componenti statici di React

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 
} 

sarei ancora più felice se ho potuto fare lo stesso lavoro componente E6 arrow function syntax, in questo modo:

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 
} 

ho seguito this video, ma non riesco a far funzionare la versione della sintassi delle frecce.

Qualcuno può segnalare cosa sto facendo di sbagliato, per favore?

+1

Nel secondo esempio (il desiderato) non si sta esportando la funzione const. –

+0

@NikosParaskevopoulos Ho provato ad aggiungere "export default" davanti a 'const' ma ottengo un errore del compilatore. –

+1

L''esportazione predefinita' è un * operatore *, prendendo un'espressione come argomento ([ref] (http://exploringjs.com/es6/ch_modules.html#_importing-and-exporting-in-detail)); quindi potresti usare 'export default (props, context) => ....;'. Altrimenti puoi esportare const ClassroomsOverview = (props, context) => ....; ', ma questo è un * nome * export, non il default. Sono d'accordo con Bergi, usa la sintassi 'export default function'. –

risposta

6

Ti manca la dichiarazione export. Aggiungi questo al vostro modulo:

export {ClassroomsOverview as default} 

Vorrei però consiglia di utilizzare la sintassi con il export default dichiarazione di funzione.

+0

Grazie, ho pensato di aver perso qualcosa di ovvio. Tuttavia, se aggiungo 'export default' prima di' const' ottengo un errore del compilatore. Forse sto fraintendendo il tuo suggerimento. Potresti essere più esplicito per favore? –

+2

'export default const X = ...;' * è * un errore di sintassi. Non è supportato Puoi fare "export default ...;" con solo il valore, ma non con una dichiarazione 'const'. Vedi anche [questa risposta] (http://stackoverflow.com/a/34107388/1048572) – Bergi

+0

La mia raccomandazione era per il primo snippet già funzionante senza la funzione freccia. – Bergi

Problemi correlati