react 引入远程 动态图片 和 引入本地 图片

2022-10-03 13:36:45

目录

1. 引入本地图片

2.引入动态的图片地址

   2.1.直接使用传递过来的地址

   2.2. 使用跟本地对应的动态图片名称

        通过require.context()实现引用

         通过直接使用public文件夹下的图片


1. 引入本地图片

普通引入,知道具体的地址

import myImg from '../asset/image/person.png'


export default Index(){
    return (<img src={myImg} alt="图片"/>)
    //##或者 这样 <img src={require('../asset/image/person.png')} alt="图片"/>    
};

2.引入动态的图片地址

   2.1.直接使用传递过来的地址

          如果你动态传递过来的图片地址就是一个网络地址,比如:如下。那么直接使用就完事了(当然有可能直接用了在调试模式下不显示,这时候你可以打包项目,在index.html下看看有没有显示,一般是能正常显示的)

let myImgs = [
    {name: 'item1',imgUrl: 'http://api/img/person.png'},
    {name: 'item2',imgUrl: 'http://api/img/cap.png'},
    {name: 'item3',imgUrl: 'http://api/img/desk.png'},
]

   2.2. 使用跟本地对应的动态图片名称

        通过require.context()实现引用

require.context(directory,useSubdirectories,regExp)

  1. directory:表示检索的目录
  2. useSubdirectories:表示是否检索子文件夹
  3. regExp:匹配文件的正则表达式,一般是文件名

比如是接口传递过来的一个图片名称组

/*
这种情况,接口只给了图片名称,图片在本地且图片名称需要跟传递过来的imgUrl名称对应(就算不对应那也得有点相似的地方方便你查找图片啊,不然你总不能通过意念去找吧)
*/

let myImgs = [
{name: 'item1',imgUrl: 'person.png'},
{name: 'item2',imgUrl: 'cap.png'},
{name: 'item3',imgUrl: 'desk.png'}]


const reqSvgs = require.context('../asset/image', true, /\.png$/);
const allSvgFilepaths = reqSvgs.keys();
//过滤之后的文件名称组,具体格式可以自行打印看看,在跟数据相对应来做处理
  
//console.log(reqSvgs,'--reqSvgs');
// console.log(allSvgFilepaths, '--allSvgFilepaths');
//测试1   代码接上面
  const path = allSvgFilepaths[allSvgFilepaths.length - 1];//取最后一张图片地址
  const imgage = reqSvgs(path).default;//我这里图片在 reqSvgs(path).default 我看到的一篇文章中那位大佬好像是reqSvgs(path)可以直接拿到,大家可以自己打印看看再去具体引用
  // console.log(imgage, '--imgage');
   <img src={image} alt="图片"/>

//测试2   代码接上面
<div>
 {
                myImgs.map(item => { 
                    //判断一下本地有没有这张图片
                    if(~allSvgFilepaths.findIndex(x=>x===`./${item.imgUrl}`)){
                        let iUrl =reqSvgs(`./${item.imgUrl}`).default; 
                        return iUrl&&<img src={iUrl} alt={item.name} key={item.name}/>
                    } 
                })
            }

</div>
//正确输出图片

         通过直接使用public文件夹下的图片

如果上面这种不想用,且你的图片放在了 public 资源文件夹下面,那么你也可以通过相对路径的方式使用图片(打包之后./指向public文件夹下),打包之后因该是也能访问到的

  return (<img key={'item' + index} className="scenic-img" src={'./assets/icon/' + item.trim() + '.png'} />)

参考

require.context()的用法详解

https://blog.csdn.net/qq_34153210/article/details/106065816

完。

  • 作者:酱香鸭脖
  • 原文链接:https://blog.csdn.net/ssoutlook/article/details/120158732
    更新时间:2022-10-03 13:36:45