动态导入图像(React Js)(需要 img 路径找不到module)

IT技术 javascript reactjs ecmascript-6 base-url
2021-04-03 07:19:02

我需要通过地图方法从我的图像文件中动态导入图像(几个)。首先,我想为我的图像文件设置一个基本 URL,然后从我的包含图像属性的 JSON 文件中读取图像的名称,然后相应地设置图像 src。JSON 文件如下所示:

{
      "title": "Blue Stripe Stoneware Plate",
      "brand": "Kiriko",
      "price": 40,
      "description": "Lorem ipsum dolor sit amet...",
      "image": "blue-stripe-stoneware-plate.jpg"
    },
    {
      "title": "Hand Painted Blue Flat Dish",
      "brand": "Kiriko",
      "price": 28,
      "description": "Lorem ipsum dolor sit amet...",
      "image": "hand-painted-blue-flat-dish.jpg"
    },

我的图片文件夹: 在此处输入图片说明

我已经阅读了 redux 的产品,它完美无缺 =>

const products = this.props.products;
console.log(products, 'from redux'); 
const fetchProducts = [];
    for (let key in products) {
      fetchProducts.push({
        ...products[key]
      });
    }

console.log() => 在此处输入图片说明

现在我想定义一个像这样的基本 URL,稍后通过在 map 方法中添加来自 JSON 文件的图像名称来用作图像 src:

const baseUrl = '../../components/assets/images/';
const fetchProducts = [];
for (let key in products) {
  fetchProducts.push({
    ...products[key]
  });
}

const productCategory = fetchProducts.map((product, index) => {
  return (
    <Photo
      key={index}
      title={product.title}
      brand={product.brand}
      description={product.description}
      imageSource={baseUrl + product.image}
      imageAlt={product.title}
    />
  );
});

我的照片组件如下所示:

  const photo = props => (
  <div className={classes.Column}>
    <img src={require( `${ props.imageSource }` )} alt={props.imageAlt} />
    <div className={classes.Container}>
      <p>{props.brand}</p>
      <p>{props.title}</p>
      <p>{props.price}</p>
    </div>
  </div>
);

export default photo;

不幸的是,我遇到了这个错误:在此处输入图片说明 预先感谢并为我的英语不好:)

4个回答

导入不是那样工作的。您可以使用这样的基本 URL:

const baseUrl = "../../components/assets/images/";

然后你可以Photo像这样传递给你的组件:

<Photo
  key={index} // Don't use index as a key! Find some unique value.
  title={product.title}
  brand={product.brand}
  description={product.description}
  imageSource={baseUrl + product.image}
  imageAlt={pro.title}
/>;

最后,在您的Photo组件中使用require

<img src={require( `${ props.imageSource }` )} alt={props.imageAlt} />

或者像这样:

<img src={require( "" + props.src )} alt={props.imageAlt} />

但是,不要跳过""部分或不要直接使用它,例如:

<img width="100" alt="foo" src={require( props.src )} />

因为require想要一个绝对路径字符串,前两个做这个技巧。

这个文件在你的目录结构中的什么位置?
2021-05-23 07:19:02
/src/components/assets/images
2021-05-25 07:19:02
谢谢,但我遇到了另一个错误:未捕获的错误:找不到module '/static/media/blue-stripe-stoneware-plate.8bf3a194.jpg,/static/media/hand-painted-blue-flat-
2021-05-26 07:19:02
你能用你当前的代码更新你的问题吗?看起来要求是可以的。这些名称是动态的,由 CRA 使用(可能是 Webpack 后面)。
2021-05-26 07:19:02
不,我的意思是您在其中使用图像的此组件的文件位置。
2021-06-16 07:19:02

所以这就是我发现的,它对我有用。

“文件加载器”:“4.3.0”react:16.12

在你的终端中运行这个:

npm run eject

检查文件加载器config/webpack.config并找到文件加载器配置。我所做的是,我static/media/{your_image_name.ext}按照那里的符号创建了一个名为的目录

options: {
    name: "static/media/[name].[hash:8].[ext]"
}

然后像这样导入这个图像

import InstanceName from "static/media/my_logo.png";

快乐黑客!

在尝试了各种解决方案后,包括反引号<img src={require( `${ props.imageSource }` )}等,没有任何效果。Cannot find module尽管我的相对路径都是正确的,但我一直收到错误消息我发现的唯一原始解决方案是,如果您的可能图像数量相对较少,则是预定义一个映射到实际导入的 Map。(当然,这不适用于大量图像。)

import laptopHouse from '../../images/icons/laptop-house.svg'
import contractSearch from '../../images/icons/file-contract-search.svg'
..

const [iconMap, setIconMap] = useState({
                                'laptopHouse': laptopHouse, 
                                'contractSearch': contractSearch, 
                                ..
                              });

..

<img src={iconMap[props.icon]} />

即使我得到了同样的错误

{gallery.map((ch, index) => {....

cannot find module '/../..................png'

我在这里出错了,我使用了 src 而不是 ch

Error
<Image src={src.image} />
Solved
<Image src={ch.image} />