2016-01-08 17 views
25

neu ES6, ich habe versucht, eine einfache funktionale Komponente wie diesekann nicht exportieren const Pfeil Funktion

// ./Todo.jsx 

    export default const Todo = ({ 
     todos, 
     onTodoClick, 
    }) => (
     <ul> 
     {todos.map((todo, i) => 
      <li key  = {i} 
       onClick = {() => onTodoClick(i) } 
       style = {{textDecoration: todo.completed ? 'line-through': 'none' }} 
       > 
      {todo.text} 
      </li> 
     )} 
     </ul> 
    ) 

Aber

// Another file 
import Todo from './Todos.jsx'; 
console.log(Todo) // undefined 

nicht nachgeben den Pfeil Funktion Reagieren zu machen.

aber wenn ich die "const todo =" Teil in dem Export Link wegzulassen, wie so

export default ({ 
     todos, 
     onTodoClick, 
    }) => (...) 

Es wird erfolgreich eingeführt.

Warum ist das?

+0

Mögliche Duplikat [ES6 Exportstandard AssignmentExpression] (http://stackoverflow.com/questions/24925628/es6-export-default-assignmentexpression) – Bergi

Antwort

38

Sie versuchen, einen Standard zu exportieren und gleichzeitig eine Variable zu deklarieren, was eine ungültige Syntax ist.

Betrachten Sie Folgendes, da wir wissen, dass Sie mehrere Variablen mit nur einer Instanz des Schlüsselwortes var a, b, c; deklarieren können, da die Exportdefinition überhaupt keinen Sinn ergibt.

export default var a, b, c; 

Was würde das bedeuten? Was würde exportiert werden?

Darüber hinaus erstellt die Syntax export default bereits eine Variable namens default, die einen Wert oder eine Referenz enthalten muss.

Exportieren Sie stattdessen die Variable, wenn Sie eine Konstante erstellen möchten.

const Todo =() => {}; 

export default Todo; 

Es gibt ein thread about this on ESDiscuss

+0

ich sehen, aber Export Klasse Todo extends Die Komponente {...} wird nicht als Deklaration einer Variablen betrachtet, sondern eine Klasse, die gültig ist, ist das korrekt? –

+1

Ja, aber das 'class' Schlüsselwort ist nur syntaktischer Zucker UND Sie können sowieso nicht mehr als 1 Klasse im gleichen go deklarieren. 'Klasse A, B, C 'hat gültige Syntax. –

+0

Dank einer Million, es macht sehr viel Sinn, der Teil über Sie kann var/const mehrere Dinge und exportieren würde nicht wissen, auf was zu handeln. –

Verwandte Themen