J'essaie d'ajouter des images de manière dynamique à partir du dossier assets dans mon composant react. Voici le code que j'ai:
import React from 'react';
const card = (props) => {
const image = require.context(
`../../assets/imgs`,
true,
new RegExp(`(${props.vnum}_${props.snum}.png)$`)
);
return (
<div>
<img src={image} alt="image" />
<p>{props.english}</p>
<p>{props.french}</p>
</div>
);
};
Lorsque je fais cela, j'obtiens l'erreur suivante:
TypeError: webpack_require (.. .). context n'est pas une fonction
J'ai utilisé CRA et en regardant les messages précédents, je vois que cela devrait fonctionner. Où est-ce que je me trompe?
4 Réponses :
Il est nécessaire de l'utiliser dans ces conventions?
La solution la plus simple sans require.context()↑
import React from 'react';
import Image from "../../assets/img/english
import Image from "../../assets/img/french
const card = (props) => {
return (
<div>
<img src={english} alt="image" />
<p>{props.english}</p>
<img src={french} alt="image" />
<p>{props.french}</p>
</div>
);
};
Aussi: p>
Il est possible d'ajouter un rendu conditionnel ici (dépend du rendu variable anglais ou français) - je ne suis pas sûr que vous en ayez besoin.
require.context est une fonction spéciale prise en charge par le compilateur de webpack qui vous permet d'obtenir tous les modules correspondants à partir d'un répertoire de base. L'intention est de dire à webpack au moment de la compilation de transformer cette expression en une liste dynamique de toutes les requêtes de module correspondantes possibles qu'il peut résoudre, en les ajoutant à son tour en tant que dépendances de construction et en vous permettant de les exiger au moment de l'exécution.
Donc, si l'expression régulière correspond à plus d'un élément - un mappage est nécessaire - cependant, je pense que dans ce problème spécifique, l'importation est suffisante.
En fait, la raison pour laquelle j'utilise require.context () est que l'image requise dépendra des accessoires transmis, donc j'en ai besoin pour reconnaître le fichier image à importer lors de la construction
Cela devrait suffire.
import React from 'react';
const Card = (props) => {
return (
<div>
<img alt="image" src={require(`../../assets/imgs/${props.vnum}_${props.snum}.png`} />
<p>{props.english}</p>
<p>{props.french}</p>
</div>
);
};
En fait, j'avais également essayé cette méthode, mais à chaque fois qu'il ne parvient pas à trouver le module, j'obtiens une erreur dans laquelle il semble qu'il ne vérifie pas le bon dossier pour l'image: Erreur: Impossible de trouver le module './3_147 .png '
Pour que cela fonctionne, le chemin doit être dans le répertoire src .
Oui, l'emplacement exact de l'image est src / assets / imgs / 1_1.png par exemple
vous pouvez utiliser simplement require ()
import React from "react";
export default function card(props) {
const image = require(`./img/${props.vnum}_${props.snum}.jpg`);
return (
<div>
<img src={image} alt="image1" width="200px" />
<p>{props.english}</p>
</div>
);
}
card.js
import React from "react";
import "./styles.css";
import Card from "./card";
export default function App() {
return (
<div className="App">
<h1>Hello</h1>
<h2>check this!</h2>
<Card vnum={12} snum={13} english={"english"} />
</div>
);
}
vous pouvez vérifier ceci ici https://codesandbox.io/s/elegant-ramanujan-5qwcp
J'ai essayé cela, mais j'obtiens une erreur dans laquelle il ne peut pas trouver le module: module non trouvé: impossible de résoudre './assets/imgs'
Ce n'est pas la réponse exacte à votre question, mais cela pourrait vous aider dans les scènes ultérieures, peut-être que vous le savez peut-être déjà. Si vous avez des URL de l'image qui peuvent être récupérées sur Internet, vous pouvez les enregistrer dans un tableau. Par exemple: const array = ['url1', 'url2', .... etc]
Ensuite, utilisez: array.map (url => { })
Aussi, si vous tirez d'une API, utilisez la même méthode.
peut-être, l'utilisation de
createContext ()pourrait résoudre votre problème!Avez-vous trouvé une solution pour cela ??