reactjs - 使用反应动态加载图像
问题描述
我创建了一个渲染图像的组件
这是组件。
import React, { lazy, Suspense } from "react";
const Icon = (props) => {
const { src } = props;
return (
<img src={src} />
);
};
export default Icon;
然后我像这样使用它
import ExampleIcon from "./../images/icons/example.png";
...
<Icon src={ExampleIcon} />
有没有更有效的方法来加载图标?然后只是“加载”example.png 并将其用作源?试图将其更改为:
const Icon = (props) => {
const src = lazy(() => import("./../images/icons/" + props.src + ".png"));
return (
<Suspense fallback={<p>loading...</p>}><img src={src} /></Suspense>
);
};
看起来它不是那样工作的。还有其他想法吗?谢谢!
解决方案
不,你不能这样做,因为React.lazy()
必须在顶层并且只返回 React 组件。要延迟加载图像,您可以在效果内执行以下操作:
function Icon = props => {
const [image, setImage] = useState()
useEffect(() => {
import("./../images/icons/" + props.src + ".png").then(setImage)
}, [props.src])
return image ? <img src={image} /> : 'Loading...'
}
编辑:这有一个小问题,即 Webpack 将无法找出要进行代码拆分的文件,因为import
函数中的字符串不是文字。您仍然可以public
使用动态访问目录中的文件 fetch
。也许您根本不需要 fetch,只需提供一个 url 即可src
免去所有麻烦。
推荐阅读
- ios - iOS 11 应用提交:“符号文件过多”
- css - 垂直调整窗口大小时,Div 容器消失
- python - 如何替换以 . (时期)?
- python - 从 Pycharm 解析 HDFS 文件
- python - ImportError:无法导入名称 MapTile
- flutter - Flutter 目录不是 GitHub 项目的克隆
- sql-server - TSQL 2012 服务器数据类型错误消息 varchar 转换浮点数(仅 SUM 值)
- mysql - Nginx Puma 和 Rails 5 负载测试失败
- python - 如果在池中定义的 greenlet 中没有捕获异常会发生什么?
- java - Javac 工作 java 不工作