【发布时间】:2019-10-29 02:00:02
【问题描述】:
在尝试了几个小时的各种方法并检查了每个相关链接之后,我找不到任何合适的方法在 React 中动态呈现图像。
这就是我想要做的。
我有一个对象数组,其中每个对象都有一个名为 name 的属性。我正在使用 map 函数 map 循环遍历这个数组并返回 img 元素的数组,如下所示。
<img className="img-thumbnail" src={require('../../public/images/'+item.name+'.png')}/>
其中 item.name 是我要显示的图像文件的名称,为此 require 给我错误“找不到模块”。 此外,我需要实现一些后备选项,而不是显示损坏的图像以防图像文件不存在,我想显示默认图像
这是我尝试过的事情:
-
在 require 上使用 try 和 catch 块并从 img 元素调用此函数
setImage(data){ try{ return require( '../../public/images/'+data+'.png' ) //actual image }catch(err){ console.log(err); return require('../../public/images/fallback.png'); //fallback }<img className="img-thumbnail" src={this.setImage(item)}/> 使用导入,在上述同一个函数内,出现错误 import cannot be called from inside of function
使用 react-image 库。原来它不支持本地图像。
有什么帮助吗?
【问题讨论】:
-
src="/images/fallback.png"呢?这更像是一个 webpack 或您正在使用的任何捆绑器的问题,而不是一个 react js 问题恕我直言。 -
这些图像是否在应用程序中可用(静态和捆绑的一部分)或者这些 uri 是从服务器动态获取的?
-
@johnnypeter 图片在应用程序内,但我从数据库中获取对象。组件挂载后出现问题,因为在那之后 require 似乎不起作用,并且在目录中仍然存在图像时显示找不到模块
-
@happysharma 如果您的网址在编译时已知,我添加了一个可以帮助您的答案
-
您正在静态渲染“动态”图像。如果您的图像是公开的,那么只需通过带有相应 JSX/HTML 元素的 URL 来获取它们,如果您的图像不是公开的,那么您将不得不异步获取 base64 数据(和 mime 类型),这可以通过“redux”之类的东西来完成-saga”(尽管对于您想要实现的目标而言,这似乎过于复杂)。
标签: javascript reactjs