/ / La riesportazione dei moduli non funziona con la diffusione degli oggetti - javascript, import, ecmascript-6, export, es6-modules

La ri-esportazione dei moduli non funziona con la diffusione degli oggetti: javascript, import, ecmascript-6, export, es6-modules

ho un index.js file che legge:

import aReducer from "./ducks/a";
import bReducer from "./ducks/b";
import * as aSelectors from "./ducks/a";
import * as bSelectors from "./ducks/b";

console.log(aReducer) //function i expect
console.log(aSelectors) //object with keys to selectors i expect

export { aReducer, bReducer, ...aSelectors, ...bSelectors };

Se io console.log in questo file vedo che i riduttori sonole funzioni che mi aspetto e l'alias dei selettori sono oggetti con tasti ai selettori che mi aspetto. I riduttori sono esportazioni predefinite per i file duck e i selettori sono esportazioni dallo stesso rispettivo file.

Tuttavia, quando provo a importare questo modulo conun altro file sono solo in grado di importare i due riduttori. I due selettori non sono definiti. Ho pensato che la destrutturazione avrebbe aggiunto ogni chiave al mio oggetto di esportazione. Che cosa sto facendo di sbagliato?

other_file1.js

import { aReducer, bReducer } from "my-module"; //works!

other_file2.js

import { someSelectorThatWasInMyaSelectorsObject } from "my-module"; //does NOT work!

risposte:

1 per risposta № 1

Non puoi usare ... in un export {}; bloccare. È un elenco esplicito di nomi proprio come import {name} from è. Non è un oggetto con le chiavi esportate. per esempio. allo stesso modo delle importazioni

import { foo as fooRenamed } from "";

con export è

export {
fooVar as foo,
};

Il export block è un elenco esplicito di variabili da esportare, con un nome esplicito facoltativo per l'esportazione. Non ci sono oggetti coinvolti.

In particolare, non ci sono oggetti coinvoltipoiché i nomi delle esportazioni vengono elaborati e conosciuti prima ancora che il corpo del file sia stato eseguito, quindi non solo gli oggetti non sono consentiti, ma sono impossibili da consentire perché gli oggetti richiedono l'esecuzione per esistere.

Per ottenere quello che vorresti, dovresti usare:

// Export the referenced files" default under two specific names.
export { default as aReducer } from "./ducks/a";
export { default as bReducer } from "./ducks/b";

// Re-export every named export from these two files.
export * from "./ducks/a";
export * from "./ducks/b";