2015-08-06 30 views
135

Questo componente funziona:Perché es6 react component funziona solo con "export default"?

export class Template extends React.Component { 
    render() { 
     return (
      <div> component </div> 
     ); 
    } 
}; 
export default Template; 

Se rimuovo ultima fila, non funziona.

Uncaught TypeError: Cannot read property 'toUpperCase' of undefined 

Immagino, non capisco qualcosa nella sintassi es6. Non è necessario esportare senza segno "predefinito"?

+2

si può scrivere come 'Esporta classe predefinita Il modello estende React.Component {' – andykenward

+0

Lo so. Ma come posso importare il componente che è stato esportato senza "predefinito"? Dovrebbe essere possibile – stkvtflw

+1

@stkvtflw Se ho risposto alla tua domanda, ti preghiamo di accettarlo in modo che anche altri utenti possano trarne vantaggio. – WildService

risposta

388

L'esportazione senza default significa che si tratta di una "esportazione denominata". Puoi avere più esportazioni con nome in un singolo file. Quindi, se lo fai,

export class Template {} 
export class AnotherTemplate {} 

quindi devi importare queste esportazioni usando i loro nomi esatti. Quindi, per utilizzare questi componenti in un altro file che avrebbe dovuto fare,

import {Template, AnotherTemplate} from './components/templates' 

In alternativa, se si esporta come il default esportazione come questo,

export default class Template {} 

Poi in un altro file si importa l'esportazione di default senza utilizzando il {}, in questo modo,

import Template from './components/templates' 

ci può essere solo uno di esportazione predefinito per file. In React è una convenzione esportare un componente da un file e esportarlo come esportazione predefinita.

Sei libero di rinominare l'esportazione di default come la si importa,

import TheTemplate from './components/templates' 

E si può importare di default e le esportazioni di nome, allo stesso tempo,

import Template,{AnotherTemplate} from './components/templates' 
+7

OK. Ma questa sembra ancora un'altra decisione apparentemente arbitraria che non vedo la logica per ma devo memorizzare. Mi manca qualche buona ragione è così? In molti progetti ci saranno dozzine di componenti React. Avere ognuno il proprio file, non importa quanto piccolo sembra, beh, un po 'anale. In particolare diventa doloroso se molti di loro condividono gruppi di funzioni di aiuto. Rende sincronizzate più linee di cose che sembrano un po 'controproducenti. Cosa mi manca? –

+2

Tutte le decisioni stilistiche e le convenzioni come questa sono in qualche modo arbitrarie e in fondo alle preferenze personali. Hai ragione, a volte potrebbe essere opportuno raggruppare molti componenti in un unico file con gli helper, in particolare per i progetti piccoli/semplici. Immagino che un motivo per cui un componente per file sia in fase di test ... quando si importa quel file per testarlo, può essere d'aiuto se si sta solo importando la quantità minima di altro codice e sotto-dipendenze insieme ad esso. Un altro motivo potrebbe essere per diff semplici su piccoli file focalizzati durante le revisioni del codice ecc. – WildService

+3

Grazie. Penso che tu abbia risposto perfettamente spiegando questo: "import React, {Component} da" react ";'. –

Problemi correlati