Sie können dies mit ES6 Importe nicht tun, weil sie static sind. Diese
bedeutet, dass müssen Sie angeben, was Sie bei der Kompilierung importieren und exportieren und kann nicht auf Änderungen zur Laufzeit reagieren.
Mit so etwas wie ein Array bedeuten würde, dass der Code ausgeführt werden muss, bevor das System sicher wissen kann, was importiert bekommen wird.
Der einzige Weg zur Zeit * (siehe unten), dies zu umgehen ist den require
CommonJS Ansatz zu verwenden.
const routes = Array
.from({ length: 10 }) // create array of 10 elements
.map((_, i) => require(`../samples/sample${i + 1}`)) // map each element to an imported file using the index
.map((c, i) => (// map each component to a route
<Route
path={`/sample${i + 1}`}
component={c}
/>
))
können Sie auch die beiden map
Schlaufen miteinander kombinieren:
const routes = Array
.from({ length: 10 })
.map((c, i) => (
<Route
path={`/sample${i + 1}`}
component={require(`../samples/sample${i + 1}`)}
/>
))
Das, das nicht eher gesagt, Sie nicht mehr als 10 verschiedenen Probenkomponenten wahrscheinlich brauchen. Anstatt einzelne Komponenten für geringfügige Unterschiede zu erstellen, warum nicht eine einzelne Komponente verwenden und ihr einen Typ übergeben, der ihr Verhalten bestimmt?
import Sample from './sample'
const routes = Array
.from({ length: 10 }) // create array of 10 elements
.map((c, i) =>
<Route // map each component to a route
path={`/sample${i + 1}`}
component={props => <Sample type={i + 1} {...props} />}
{/* ^now every sample knows which one it is */}
/>
)
In der Tat könnte man nicht mehrere Routen benötigt, wie gut und könnte eine Einzel Route mit einem dynamischen Segment, die den Probentyp verwenden und übergibt das zusammen mit dem Bauteil. Wenn Ihre Komponente Standard exportiert
Promise.all(
Array
.from({ length: 10 }) // create array of 10 elements
.map((_, i) => import(`../samples/sample${i + 1}`)) // map each element to a promise resolving to the imported file
).then(components => { // map each component to a route
const routes = components
.map((c, i) => (
<Route
path={`/sample${i + 1}`}
component={c}
/>
))
})
verkürzen Ich denke, man programmatisch die Datei während des Build-Prozesses aus der Verzeichnisstruktur – Bergi