javascript - 在 React 应用程序中使用 require 加载图像
问题描述
我是 React 的新手,我正在尝试创建一个涉及卡片的游戏,其中 websocket 返回一组卡片名称,并且在前端我从本地图像目录生成正确的卡片图像。从 websocket 返回的卡片名称与图像的文件名匹配,例如“map”对应于图像“map.jpg”。我正在尝试映射数组并为数组中的每个卡名创建一个图像标签。我读到最好的方法是使用require()
,所以我尝试做类似的事情
//inside component
let cardImgs;
...
socket.on(RECEIVED_STARTING_HAND, (hand) => {
cardImgs = hand.map(cardName => <img src= {require(`../../card_images/${cardName}.jpg`)}/>
})
...所以稍后在我的组件中我可以做这样的事情:
return (
<div>
<h1>My hand</h1>
{cardImgs}
</div>
...
)
但是,cardImgs
不渲染。在我return
的组件声明中,我测试了直接渲染图像并且它有效,例如
const map = "map"
return (
<div>
<h1>My hand</h1>
{cardImgs}
</div>
...
//this one renders!!!
<img src={require(`../../card_images/${map}.jpg`)} />
)
我用 Create-React-App 创建了我的 react 应用程序,我读了一些东西说我应该重新配置我的webpack.config.js
文件,但是我也读了一些东西说我不应该碰它,除非我需要。我不确定为什么require()
在我return
的组件声明中这样做时有效,但在给定图像标签数组时它不起作用。我是否遗漏了什么,或者您对在 React 中动态加载图像的更好方法有什么建议?谢谢!
解决方案
如果您想从本地文件夹渲染图像,您可以使用导入语法导入您需要的图像,然后在您的 img 标签中使用它
import card1 from '../you/path/to/image.png';
import card2 from '../you/path/to/image.png';
import card3 from '../you/path/to/image.png';
const cards = {
nameToCard1: card1,
nameToCard2: card2,
nameToCard3: card3,
}
在您的套接字方法中:
socket.on(RECEIVED_STARTING_HAND, (hand) => {
cardImgs = hand.map(cardName => cards[cardName] />
})
并在您的渲染方法中:
return (
<div>
<h1>My hand</h1>
<ul>
{cardImgs.map((img) => <li><img key={img} src={img} /></li>)}
</ul>
</div>
)
我希望这对你有帮助,祝你有美好的一天。
推荐阅读
- javascript - javascript异步获取函数
- php - 如何使用 PHPMailer 向电子邮件添加多个附件
- css - 如何在 React 中将大量空 Div 渲染为网格项?
- amazon-web-services - 新部署解决了 AWS 中 CPU 峰值的一些可能原因是什么?
- c# - 使用 C# 检查字符串是否包含给定数字范围内的整数
- ruby-on-rails - 是否可以使用 Wisper 将一个订阅应用于多个侦听器?
- r - 识别具有变量所有缺失值的组并在 R 中的组内推断
- excel - 如果偏移量相同,则根据以下值填充空单元格
- java - java -version 不想加载我的 Java_home 的新值
- reactjs - 满足条件后如何取消地图?