react-native - 在应用程序加载时缓存完整的图像文件夹(React Native Expo)
问题描述
我想在显示启动画面时缓存数百张图像。
遵循以下指南:https ://docs.expo.io/versions/latest/sdk/app-loading#__next
我不想一一输入:
async _cacheResourcesAsync() {
const images = [
require('./assets/images/image1.png'),
require('./assets/images/image2.png'),
require('./assets/images/image3.png'),
require('./assets/images/image4.png'),
require('./assets/images/image5.png'),
require('./assets/images/image6.png'),
...
];
const cacheImages = images.map((image) => {
return Asset.fromModule(image).downloadAsync();
});
return Promise.all(cacheImages)
}
我注意到我不能做类似 (./assets/images/*) 的事情:
async _cacheResourcesAsync() {
const images = [
require('./assets/images/*')
...
];
}
有没有办法引用 _cacheResourcesAsync() 上的完整文件夹?
解决方案
您正在寻找的东西被称为dynamic imports
(例如:在 webpack 中),它在 React Native 中不可用。 这里描述了如何在 React Native 中通过自动化和 Babel 插件来做到这一点。鉴于单个维护者 Babel 插件似乎在 Babel 的微小升级之间不能很好地生存,我强烈建议采用自动化方法,类似于上面链接的文章中的内容。
不过,就我而言,我可能会这样做并将其bash
绑定到我的构建过程中(通过package.json
's "scripts"
)。它会是这样的:
#!/bin/bash -exu
# The paths are relative to the script's parent directory.
DIRS_TO_BUILD=( ./src/res ./images ./assets );
cd `dirname $0`
HEREDIR=`pwd`
for DIR in "${DIRS_TO_BUILD[@]}"
do
cd "$HEREDIR/$DIR"
rm index.js
FILES=`ls -1QBb | grep -E '.js($|x|on)' | sort -u`
for FILE in $FILES
do
if [ -f "$FILE" ]
then
BASENAME=`basename "$FILE" .js`
BASENAME=`basename "$BASENAME" .jsx`
BASENAME=`basename "$BASENAME" .json`
echo "export const $BASENAME = require(\"./$FILE\");" >> index.js
fi
done
done
抵制调用这个脚本的冲动import * as MyAssets from "./assets"
,因为它会在它到达时杀死摇晃树。
您可以修改该脚本来代替/也生成对loadAsync的调用,以便预取所有资产。这样的修改留给读者作为练习。
推荐阅读
- javascript - 如何让我的功能显示在图像上(并保留图像)?
- python - 如何搜索和替换汤对象中的文本?
- c# - IIS 应用程序池身份对隔离存储的权限,无需更改 iis auth 方法
- reactjs - onClick 不适用于从“react-select”导入的按钮;
- docker - docker-compose 可以在任何时候拉取/使用图像时构建图像?不更新驱动
- overriding - OOP Python - 从子类调用方法时答案 = 无
- kubernetes - Fluentd - 根据节点池或命名空间配置 CPU 和内存请求和限制
- access-point - 如何在只有一个工作 IP 地址的 LAN 网络上配置接入点?
- python - 在 python 列表中删除相似或接近的值并且只写一次
- android - 单击页面后是否可以隐藏android webview?