React Native - ImageBackground 延迟加载本地图像
ReactNative - ImageBackground load local image with a delay
我注意到,当我 运行 react-native
应用程序时,我使用标签 <ImageBackground>
设置为背景的图像加载延迟将近 2 秒,即使它们不是沉重的图像 (~100K),它们存储在本地。
我也看过,但没有解决我的问题。
这是我插入图像作为背景的简单代码:
<ImageBackground source={require('../images/ScanQR.png')} style={styles.backgroundImage}>
<Text style={styles.domanda}>
Example text
</Text>
</ImageBackground>
您可以要求() App.js 中的图像来加载它们。这样做:
async function loadResourcesAsync() {
await Promise.all([
Asset.loadAsync([
require('./assets/images/stock1.jpg'),
require('./assets/images/stock2.jpg'),
require('./assets/images/undraw1.png'),
]),
Font.loadAsync({
// This is the font that we are using for our tab bar
...Ionicons.font,
// We include SpaceMono because we use it in HomeScreen.js. Feel free to
// remove this if you are not using it in your app
'open-sans-regular': require('./assets/fonts/OpenSans-Regular.ttf'),
'open-sans-extrabold': require('./assets/fonts/OpenSans-ExtraBold.ttf'),
}),
]);
}
我在这里使用 Expo,你不需要创建这个函数,它已经在 App.js 中,只需在 require() 函数中添加你的图像。
我不知道这是否适用于没有 Expo 的 React Native。
遵循,但对于使用 React 函数组件的人,您可以使用钩子来实现相同的结果。
此外,您可以使用 expo-app-loading
中的 AppLoading 组件来保持启动画面,直到一切准备就绪。
function useImages(images) {
const [loaded, setLoaded] = useState(false);
const [error, setError] = useState(null);
useEffect(() => {
Asset.loadAsync(images)
.then(() => setLoaded(true))
.catch(setError);
}, []);
return [loaded, error];
}
export default function App() {
const [imagesLoaded] = useImages([
require('./assets/images/stock1.jpg'),
require('./assets/images/stock2.jpg'),
require('./assets/images/undraw1.png'),
]);
if (!imagesLoaded) {
return <AppLoading />;
}
return <>...</>;
}
我注意到,当我 运行 react-native
应用程序时,我使用标签 <ImageBackground>
设置为背景的图像加载延迟将近 2 秒,即使它们不是沉重的图像 (~100K),它们存储在本地。
我也看过
这是我插入图像作为背景的简单代码:
<ImageBackground source={require('../images/ScanQR.png')} style={styles.backgroundImage}>
<Text style={styles.domanda}>
Example text
</Text>
</ImageBackground>
您可以要求() App.js 中的图像来加载它们。这样做:
async function loadResourcesAsync() {
await Promise.all([
Asset.loadAsync([
require('./assets/images/stock1.jpg'),
require('./assets/images/stock2.jpg'),
require('./assets/images/undraw1.png'),
]),
Font.loadAsync({
// This is the font that we are using for our tab bar
...Ionicons.font,
// We include SpaceMono because we use it in HomeScreen.js. Feel free to
// remove this if you are not using it in your app
'open-sans-regular': require('./assets/fonts/OpenSans-Regular.ttf'),
'open-sans-extrabold': require('./assets/fonts/OpenSans-ExtraBold.ttf'),
}),
]);
}
我在这里使用 Expo,你不需要创建这个函数,它已经在 App.js 中,只需在 require() 函数中添加你的图像。
我不知道这是否适用于没有 Expo 的 React Native。
遵循
此外,您可以使用 expo-app-loading
中的 AppLoading 组件来保持启动画面,直到一切准备就绪。
function useImages(images) {
const [loaded, setLoaded] = useState(false);
const [error, setError] = useState(null);
useEffect(() => {
Asset.loadAsync(images)
.then(() => setLoaded(true))
.catch(setError);
}, []);
return [loaded, error];
}
export default function App() {
const [imagesLoaded] = useImages([
require('./assets/images/stock1.jpg'),
require('./assets/images/stock2.jpg'),
require('./assets/images/undraw1.png'),
]);
if (!imagesLoaded) {
return <AppLoading />;
}
return <>...</>;
}