使用require()从相对路径加载图像时找不到模块

时间:2019-02-09 14:24:55

标签: reactjs react-router

我正在尝试从React组件状态下给定的路径加载图像。使用由create-react-app创建的应用。出现以下错误:

找不到模块'../ assets / images / img-2.jpg'

已经检查图像在路径上。同样,只有在安装了react-router-dom并设置了路由之后,这种情况才会发生。

import React, {Component} from 'react';
import { Carousel,Image } from 'react-bootstrap';


class JumboBanner extends Component {
constructor(props, context) {
    super(props, context);

    this.handleSelect = this.handleSelect.bind(this);

    this.state = {
      index: 0,
      direction: null,
      images : [
        {path:'../assets/images/img-1.jpg', body:{title:'This is title',text:'Kutchi Text'}},
        {path:'../assets/images/img-2.jpg', body:{title:'This is title',text:'Kutchi Text'}},

      ]
    };
  }

  handleSelect(selectedIndex, e) {
    this.setState({
      index: selectedIndex,
      direction: e.direction,
    });
  }

  render() {
    const { index, direction,images } = this.state;

    const corouselItems = images.map(img=> (<Carousel.Item>
        <Image className="d-block w-100" src={require(`${img.path}`)}/>
        {/* <img
          className="d-block w-100"
          src={require(`${img.path}`)}
          alt="First slide"
        /> */}


      </Carousel.Item>) );
    return (
      <Carousel
        activeIndex={index}
        direction={direction}
        onSelect={this.handleSelect}>
        {corouselItems}

      </Carousel>
    );
  }
}
export default JumboBanner;
-testapp
|-public
|-src
|--assets
|-|-images

2 个答案:

答案 0 :(得分:0)

使用导入来加载图像会解决您的问题。

import imgOne from '../assets/images/img-1.jpg'; 

<img src={imgOne}/>

答案 1 :(得分:0)

问题已解决。这是因为我对src文件夹中的每个文件夹都有一个index.js文件。 webpack的默认路径解析器和react-create-app构造一个数组相对路径,并在此过程中搜索cwd中的index.js文件,如果找到一个,它将所有相对路径映射到该目录或其直接父目录。因此,.. /或./将针对当前工作目录中的路径进行映射。我将资产文件夹移到了cwd中,问题解决了。尽管这只是一种解决方法,但我认为这与浪费时间试图找出webpack的内部信息或react-create-app样板代码是更好的平衡。

谢谢大家的帮助。