【问题标题】:Require in reactjs is throwing cannot find modulereactjs中的要求抛出找不到模块
【发布时间】:2020-01-04 10:51:23
【问题描述】:

编辑:Noob 在这里提供帮助。

我已经检查了很多类似的问题,但没有一个是相同的。

React 正在从 express 接收一个对象数组。循环,获取每个对象图像链接并将其添加到源中。

这是原始代码

  {this.state.currentTemplates.map((items, pos) => {
            return (
              <div className={`template `}>
                <img src={require(`${items.link}1.jpg`)} />
                <p>{items.name}</p>
                <div className="buy">buy</div>
              </div>

如果存在这样的图像,require 会找到它并且它会工作。

但是如果我向另一个函数发送请求以首先检查图像是否存在,例如尝试捕获。

 <div className={`template `}>
//sending url to another function. Also I can put the function outside of class and just call without 'this' and it does not make any difference.

                <img src={this.checkUrl(`${items.link}1.jpg`)} />
                <p>{items.name}</p>
                <div className="buy">buy</div>

例如:

 checkUrl(url) {
       console.log(url); // receive right url '../products/templates/a.jpg'
       try {  
 // try will require the right url but module cannot found it and it goes to catch. Now I can also put it in a variable var a= require(url) and it does not make a difference

          require(url);
console.log("it works "); // it never gets to here.
          return url; // this may not work once returned but it does not get to here.
      }catch(e) {
//react jump to catch with "cannot find module '../products/templates/a.jpg'"
         console.log(e);
       }
}

我得到错误:要求找不到模块'../products/templates/1.jpg'

有趣的事情。如果我使用 templates.jsx 文件在组件文件夹中添加产品文件夹。它有效。

这也不是语法错误,我可能在此处复制了问题。

回顾:如果我直接从 src jsx 调用 require(url),它会找到图像。

如果我将 url 传递给另一个函数来尝试捕获。控制台记录正确的 url 但要求 throw 找不到模块。

这是一个反应限制吗?有解决办法吗?我是不是以错误的方式接近这个你?

【问题讨论】:

  • 尝试而不需要为什么使用需要它应该可以在不需要这种形状的情况下工作
  • 我试过了,这就是我得到的。图片根本不显示,但在检查中,我看到了正确的网址。 '' 但在网络选项卡中。 1.jpg 有这个错误信息。 “无法获取 /products/moveItFitness/1.jpg”。我想我必须将图像放在同一个文件夹中。它似乎无法返回 2 步。

标签: reactjs require


【解决方案1】:

您以错误的方式处理它,必须提供您的图像,而不需要将其作为模块。它必须包含在您的静态资产中,或在其他服务器中提供的外部 url。这是常见的模式,请不要复杂化。

如果你有一个公用文件夹,就像放在里面一样

public/images/image1.jpeg

然后在您的代码中,您可以通过以下方式访问它:

<img src="/images/image1.jpeg" />

只要您提供资产。

希望这会有所帮助!

【讨论】:

  • 这很有趣。你知道我最初是这样写的(来自 html , css ,纯 js 背景。)但它不起作用。图像根本不加载。经过研究,我发现反应要么需要图像,要么我必须导入它。因为链接信息来自数据库,我不能硬编码,它必须是动态的。但我会再试一次,以防我喝醉了。外部 URL 就是这样工作的。测试过了
  • 如果是这样,那么只需将链接直接放到 src="link-here" 即可。它不是必需的。 元素只是通过 url 获取图像来加载图像。例如,如果您有 1,000 张图像,那么它需要在您的文件夹中,因为您需要它才能使用它?答案是不!这就是为什么您不需要图像,只需要链接。你明白我的意思吗?
  • 好的,兄弟。我会试一试,如果它有效,我会给你信用。感谢您的快速回复。可以肯定的是,您的意思是 src={items.url} 可以正常工作。
  • 好的,这并没有按照我想要的方式解决它,但它可以工作,这是唯一的方法。文件必须在公用文件夹中。它不能位于公共文件夹之外,否则它将无法工作,这是我想要添加我的产品文件以进行管理的位置
【解决方案2】:

首先查看文件夹所在的行路径以检查是否提供正确的路径使用此&lt;img src={${items.link}1.jpg} /&gt; 无需要求 再次,如果图像是在网络上找到的外部图像,则没有问题,但如果是内部存储,请检查您的正确路径

【讨论】:

  • 我试过了,这就是我得到的。图片根本不显示,但在检查中,我看到了正确的网址。 '' 但在网络选项卡中。 1.jpg 有这个错误信息。 “无法获取 /products/moveItFitness/1.jpg”。我想我必须将图像放在同一个文件夹中。它似乎无法返回 2 步。
猜你喜欢
  • 1970-01-01
  • 2017-03-02
  • 1970-01-01
  • 1970-01-01
  • 2020-03-15
  • 1970-01-01
  • 2018-02-26
  • 2016-01-27
  • 1970-01-01
相关资源
最近更新 更多