Con*_*nan 3 javascript reactjs webpack
我正在创建一个 React 组件,它随机循环显示大量背景图像。根据我的理解,我可以在这里忽略 Webpack,而只是动态生成 require/import 语句并将它们传递给组件。
但是,如果我希望 Webpack 使用加载器并生成哈希等 - 我还没有找到解决方案。
这个问题是类似的,但回答没有解决这个问题: Dynamically Add Images React Webpack
我当前的解决方案只需要组件中的所有图像 - 但是,我想知道这样做的“成本”是多少 - 只是增加了包大小?附件是示例代码来演示我的意思:
import React from 'react';
import styles from './Background.css';
const pic0 = require('./imgs/0.jpg');
const pic1 = require('./imgs/1.jpg');
const pic2 = require('./imgs/2.jpg');
const pic3 = require('./imgs/3.jpg');
// etc etc etc
class Background extends React.Component {
constructor(props) {
super(props);
this.state = {
pic: {},
};
this.changeBackground = this.changeBackground.bind(this);
}
componentWillMount() {
this.setState({ pic: pic0 });
}
componentDidMount() {
// set timeout here
}
changeBackground() {
// change background via component state here
}
render() {
return (
<img className={styles.background} src={this.state.pic} />
);
}
}
export default Background;
Run Code Online (Sandbox Code Playgroud)
想法?任何帮助将不胜感激。
这取决于您配置 webpack 使用哪个加载器来加载这些图像。
当您使用 url 加载器时,图像的内容将采用 base64 编码并嵌入到您的 JavaScript 包中。
因此,您需要的图像越多,浏览器最初必须下载的包就越大。优点是所有图片都加载到浏览器中,可以立即显示。
当你使用 file-loader 时,图像文件被复制到你的分发文件夹(通常用内容哈希重命名),图像的 URL 存储在你的 JavaScript 包中。
需要大量图像对 JavaScript 包的大小影响很小。该应用程序启动速度更快。缺点是浏览器必须在您显示图像时按需从服务器获取图像。
url-loader:更大的 JS 包,所有图像立即显示,更难利用图像缓存
文件加载器:较小的 JS 包,显示时单独检索图像,更好地利用图像缓存。
根据您的问题陈述(随机循环浏览大量图像),我将从file-loader.
好消息是您的 JS 代码无论哪种方式都没有改变:您只需将导入的图像视为 URL。如果你改变主意,它只是一个 webpack 重新配置。
由于您有一个完整的图像文件夹,我还建议使用webpack 上下文本质上要求在一行中包含整个文件夹:
const imageReq = require.context("./imgs", false, /\.jpg$/);
setUrl(i) {
// "require" a specific image e.g. "./4.jpg"
const url = imageReq(`./${i}.jpg`);
this.setState({pic: url});
}
// ...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1842 次 |
| 最近记录: |