路径存储在 React 变量中时无法渲染图像

Posted

技术标签:

【中文标题】路径存储在 React 变量中时无法渲染图像【英文标题】:Can't Render Image When Path Stored in React Variable 【发布时间】:2020-12-30 13:45:34 【问题描述】:

我有很多图片需要在我的 react 应用中使用,所以我不想一一导入。为此,我使用reqiure()。然而,虽然require 在下面这样使用时有效:

return <img src=require("./images/lets_go.png") />

如果我将该路径存储在变量中:

let v = "./images/lets_go.png";
return <img src=require(v) />

我收到Error: Cannot find module './images/lets_go.png'

为什么它不允许我使用存储在变量中的路径(它是完全相同的路径),我怎样才能使它工作?

【问题讨论】:

我很确定这与 webpack 不知道如何处理这样的动态导入有关。您可能希望通过部分导入来缩小搜索范围。 SEE requie(variable) 和 require('xxx') 看起来一样,但对于 webpack 来说却不同。当 webpack 看到 "require('xxx')" 时,它会知道 'xxx' 是一个常量,但对于 "require(v)" 它不知道此时 "v" 是什么。 【参考方案1】:

您可以导入图像并将其绑定到 src 属性,就像它在 create-react-app 中所做的那样,带有如下徽标:

import logo from './logo.png' // relative path to image 

class Home extends Component  
    render()  
        return ( 
            <img src=logo alt="logo"/> 
        )  
    

或者,如果您使用 create-react-app cli 创建项目,则可以访问您的公共文件夹。只需在 public 中创建 images 或 assets 文件夹,您就可以在 jsx 中访问它,如下所示:

public/images/ -> store images here

<img src="/images/home.png" /> -> use it like this in jsx

【讨论】:

【参考方案2】:

这将使用“部分”要求来工作,您将路径作为文本提供,图像名称可以是变量。发生这种情况的原因与 webpack 处理静态路径的方式有关。

我们所知道的有效,(静态图像路径):

<img src=require("./images/lets_go.png") />

尝试使路径成为我们发现的这样的变量不起作用

let v = "./images/lets_go.png";

<img src=require(v) />

尝试使路径成为变量时会起作用

 let v = "lets_go.png";

    <img src=require(`./images/$v`).default />

请注意,由于与反应脚本相关的错误,需要在 2021 年 5 月的要求末尾添加 .default。如果您将来阅读本文,这可能已修复且不需要。

当然,您需要将所有图像存储在同一个文件夹中,但这可以让您在 react/js 中动态加载大量图像,而无需手动将它们全部导入代码中。

【讨论】:

以上是关于路径存储在 React 变量中时无法渲染图像的主要内容,如果未能解决你的问题,请参考以下文章

react-native - 图像需要来自 JSON 的本地路径

javascript 使用存储和路径渲染React

无法使用 java swing 从类路径渲染图像?

React 页面无法通过带有相对文件路径的 JSON 加载图像

require(variable) 导致错误找不到模块“。”

将图像路径转换为 ​​blob react native