javascript - Skapa en loop för att importera filer dynamiskt i React


Tänk på att jag har en mapp med .md-filer som detta:

/static/blog/
  example_title.md
  another_example.md
  three_examples.md

och jag har en array som inkluderar alla titlar:

const blogEntries = ["example_title", "another_example", "three_examples"]

I min komponent vill jag importera dem alla, notera att det kan vara färre eller fler.

Finns det något sätt att dynamiskt importera dem på liknande sätt:

for (let entry in blogEntries) {
  import `Markdown_${entry}` from `/static/blog/${entry}.md`
}

och senare i mitt renderingsprogram kan jag göra:

<Markdown_three_examples />

Ovanstående skulle uppenbarligen inte fungera, men jag letar efter ett sätt att uppnå något liknande.

Svar #1

Du kan försöka använda dynamiska importer - import(). Som namnet antyder fungerar de under körning och kan ha dynamiska url:er.

Observera: för närvarande stöds de nativt av Chrome och Safari, men inte av Firefox, IE och Edge. Du kan dock använda webpack för att lösa det.

const blogEntries = ["example_title", "another_example", "three_examples"]

const loadEntries = (entries) =>
  Promise.all(entries.map((entry) => import(`/static/blog/${entry}.md`)));

loadEntries(blogEntries)
  .then((entries) => console.log(entries));

Svar #2

const Markdown = {}

for (let entry in blogEntries) {
  Markdown[entry] = require(`/static/blog/${entry}.md`)
}