- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在研究 <Suspense>
和 React.lazy()
概念,我想更好地理解为了向现有应用程序添加一些逻辑会发生什么。
让我们从定义开始:
The React.lazy function lets you render a dynamic import as a regular component.
(render 由我突出显示)
和
If the module containing the OtherComponent is not yet loaded by the time MyComponent renders, we must show some fallback content while we’re waiting for it to load[...]
(已加载由我突出显示)
现在,Suspense
定义使用术语加载,lazy()
使用渲染。
让我们为这个概念添加一些代码。
const ComponentOne = React.lazy(() => import("./ComponentOne"));
const ComponentTwo = React.lazy(() => import("./ComponentTwo"));
function BigBang() {
return (
<Suspense fallback={<SplashScreen/>}>
<section>
<ComponentOne/>
<ComponentTwo/>
</section>
</Suspense>
);
}
很好。我们的想法是延迟加载 ComponentOne 和 ComponentTwo。虽然此过程尚未结束,但我们将显示 SplashScreen。
问题现在,假设我将一些本地镜像导入到 ComponentOne 和 ComponentTwo 中(我将只为一个添加代码,让我们假设另一个有类似的东西):
import avatar from "../../img/avatar.svg";
import logo from "../../img/logo.svg";
export default class ComponentOne extends React.Component {
componentDidMount() {
console.log("ComponentOne@componentDidMount");
}
render() {
console.log("ComponentOne@render");
return (
<div style={{display: 'none'}}>
<img src={avatar}/>
<img src={logo}/>
</div>
);
}
}
现在应该清楚我想问的是什么了:
加载所有导入后,SplashScreen 是否消失?换句话说,当 SplashScreen 消失时,我是否可以假设 ComponentOne 和 ComponentTwo 中的所有图像都已加载?
这是主要问题。
第二个问题(这似乎与我有关,但如果不是我可以打开另一个线程)是:如果对上一个问题的回答是“否”,确保图像/字体的最佳策略是什么/“api response”/“other resources”在渲染之前加载,可能因为已经存在的流而维护逻辑?直接fetch()
目前不支持到资源。
最佳答案
Suspense
等待获取动态导入的组件文件(比方说 0.js
)。现在,一旦 0.js
加载并开始解析,Suspense
就会停止显示 SplashScreen
并委托(delegate)控制您的组件。接下来发生的任何事情都不是延迟加载。这就像您执行静态导入时会发生的情况。
在您的情况下,只有在 SplashScreen
消失后才会加载这两个图像。现在,如果你想预加载/延迟加载图像,有几种方法可以继续。
1) 如果您使用的是 webpack,则可以使用 url-loader
将图像内联为 data-uri
。但请注意,这可能会增加您的包大小,并且您还会失去通常是静态的图像的浏览器缓存。
2) 对于 svg,您可以使用 inline-react-svg
babel 插件,它将 svg 转换为 react 组件,以便它成为您的包的一部分 (0.js
)。但它也有上述相同的权衡。
因此预加载图像有其自身的权衡。可能有更好的替代方案,例如可以轻松完成的延迟加载,也可以从几个第三方库中获得 React HOC。
关于javascript - 关于 React、Suspense、lazyLoad 和预加载/渲染元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56475103/
我怎样才能让 Reacts Suspense 不显示任何回退而是保持在同一页面上这就是我的 return (
我正在使用lazyload jQuery 插件。 它工作正常,除了一个问题:在滚动之前,图像 src 不会被交换为原始数据。一旦你滚动,即使是一点点,图像也会加载 - 但我需要它们在页面准备好时立即加
jQuery LazyLoad 不会在打开页面的可见部分加载图像,直到我滚动页面(即使是 1px)。 当我滚动页面时,一切正常 更新: CoffeeScript jQuery -> $("img
我收到错误,lazyload 不是函数 但是在调用该函数之前加载了 jquery 和lazyload。我查了一下,只加载了一个jQuery。加载的顺序是有效的。 http://meny.astadvi
我无法想象这是如何开始发生的,几个月来一直运行良好...... http://www.lizhess.com/shop/ 在 chrome/ff 中观察您的网络选项卡 - 它在页面上一秒钟后加载 25
我有一个网页,上面有很多图像。这些图像中的大部分都位于 slider 内,使用 SlickSlider.js 和 Lazyload。 该页面的加载时间为 3.87 秒,但发出了超过 134 个请求。查
我目前正在开发一个应用程序,它有一个使用 LazyLoader 方法填充的列表,所以我有以下类: 文件缓存.java,ImageLoader.java,LazyAdapter.java,工具.java
我有一个 Query 对象,它最初配置为 lazyload() 模型上的所有关系: query = session.query(Article).options(lazyload('author'))
我正在使用保罗爱尔兰的无限卷轴 http://masonry.desandro.com/demos/infinite-scroll.html以及 Mike Tupupola 的延迟加载 jquery
我有一个实体映射,其中有三个标记为延迟加载的属性。我的期望是,当我访问单个属性(即缩略图)时,只会加载该属性的数据。但是,如果访问这些属性中的任何一个,NHibernate 似乎将加载所有标记为 La
我正在使用lazyload.js 库来延迟加载动态加载到无限 ScrollView 中的图像。当我开始滚动并加载下一页结果后,延迟加载工作得很好。 初始加载时,图像不会延迟加载,直到窗口中发生某些操作
我使用 Mootools 库开发了一个 JS 密集型网站,但在路上遇到了障碍。页面上有一个滚动 div,其中包含 500 多个图像,我正在尝试实现延迟加载功能,因此页面不会一次加载所有 500 多个图
需要有关在刷新、加载、排序、分页页面时选择 primefaces 数据表第一行的正确方法的帮助
您好,我想了解 sqlalchemy 延迟加载是如何工作的?假设我有这个查询 results = ( session.query(Parent). option
有人知道为什么我的延迟加载似乎不起作用吗? 我完全从延迟加载页面复制,甚至使用它们的图像作为测试,它们只是正常加载而不是淡入淡出......? lazy link example 然后我放入了一个无冲
因此,所有代码都运行良好。查询一个数据库,节点/父 ID 被懒惰地传递给 jsTree,并且,如果在搜索栏中键入一个术语——类似的过程继续进行,但传递给 jsTree 的节点是由另一个 SQL 查询返
我在网页的某个部分对图像使用延迟加载 功能。 (基本上,当前显示在 viewport 中的图像是获取的。其余的不是从服务器获取的。)以下 JavaScript 有效。 用法示例:img class="
正在从事一个使用 Spring/JPA/Rest 的项目。我们有一个类,它有一个 @OneToMany 字段(在下面的例子中说 Student ),它被标记为延迟加载。然而,当我们在 postman
我一直在开发一个单页应用程序,现在它已经变得非常庞大。我从 Require JS 和 AngularJS 开始,但是组件太多,加载单个页面会向服务器发出大约 40-50 个请求(包括模板文件)。 即使
我正在使用 VVO 的延迟加载 http://vvo.github.io/lazyload/很长一段时间以来,但对于这个特定页面,我不知道出了什么问题。它在页面加载时加载所有图像,这些图像应该是延迟加
我是一名优秀的程序员,十分优秀!