2015-12-01 5 views
5

Ich benutze Babel/ES6 mit Webpack. Ich importiere die gleiche "Actions" -Datei - die eine Reihe von Funktionen exportiert - an zwei verschiedenen Orten. An einer Stelle gibt es ein Modul, das andere undefined:Wie kann eine importierte Funktion in ES6 in einer Datei und nicht in einer anderen Datei definiert werden?

actions.js

export function test() { ... } 
export function test2() { ... } 

App.js

import actions from './actions' 
class App extends React.Component { ... } 
console.log(actions);   //<-------- Object{test:function,test2:function) 
export default connect((state) => { ... },actions)(App); 

bearbeiten der Grund App.js gearbeitet war, weil es tatsächlich unter Verwendung import * as actions als unten verstaut, habe ich gerade falsch in dem Beispiel

getapt NestedComponent.js

import actions from './actions' 
class NestedComponent extends OtherComponent { ... } 
console.log(actions);   //<-------- logs undefined 
export default connect((state) => { ... },actions)(NestedComponent); 

Ist dies im Zusammenhang mit der Reihenfolge, in der die Module webpack/Dateien definiert?

+1

Sind Sie sicher, dass Aktionen im selben Verzeichnis wie NestedComponent vorhanden sind? –

+0

nein es ist tatsächlich in einem verschachtelten Ordner in meinem Setup, aber ich habe den Pfad doppelt überprüft, und sowohl der Editor und der Babel-Compiler beschweren sich, wenn ich es ändere (was es gut war) – Flion

+0

@Felix King ist richtig. Da Sie keine Standardexporte in der Aktionsdatei verwenden, können Sie nichts davon importieren, es sei denn, Sie haben einen benannten Import verwendet. –

Antwort

10

Dies sollte in beiden Fällen nicht funktionieren, da Sie die falschen Werte importieren. import foo from '...' importiert den Standard Export des Moduls, aber Sie haben keinen Standard-Export, Sie haben nur Exporte genannt.

Was sollten Sie verwenden, ist

import {test, test2} from './actions'; 
// or 
import * as actions from './actions'; 
+1

Ah ja du hast Recht, das war das Problem. Ich benutze '' 'Import * als Aktionen von './Actions'''' jetzt und es funktioniert perfekt. Tnx! – Flion

0

Ein weiterer häufiger Fall, in dem dies geschieht, ist, wenn Sie mit Jest testen sind und auto-spöttische Verhalten aktiviert ist. Viel Kummer, solche Gotcha.

10

Ich stieß auf ein ähnliches Problem, verursacht durch zirkuläre Abhängigkeiten. Versucht, eine Konstante in der Datei 'A' aus der Datei 'B' zu importieren, die wiederum versucht hat, aus der Datei 'A' zu importieren.

+0

Das hat mein Problem gelöst. Vielen Dank! –

Verwandte Themen