- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
更新到 Expo sdk 34 后,出现此错误:TypeError:Asset.fromModule 不是函数。 (在“Asset.fromModule(image)”中,“Asset.fromModule”未定义)
。
更新到新版本时,我已经运行了 Expo 建议使用此命令的 cod-mod:npx expo-codemod sdk33-imports src
,我还尝试更改 import * as Asset from 'expo-asset';
到 import { Asset } from 'expo-asset'
,但这些更改都没有修复此警告。
这是我的 App.js
import React from 'react';
import { Dimensions, Alert } from 'react-native';
import {Root} from 'native-base';
import {createRootNavigator} from './router';
import {configureFontAwesomePro} from "react-native-fontawesome-pro";
import Geocoder from 'react-native-geocoding';
import { AppLoading } from 'expo';
import * as Asset from 'expo-asset';
import * as Font from 'expo-font';
import Api from './services/api';
import Moment from 'moment';
import Config from './config/config';
import './i18n';
import store from './store/store';
import i18n from 'i18n-js';
configureFontAwesomePro();
const RootNav = createRootNavigator();
function cacheImages(images) {
return images.map(image => {
if (typeof image === 'string') {
return Image.prefetch(image);
} else {
return Asset.fromModule(image).downloadAsync();
}
});
}
function cacheFonts(fonts) {
return fonts.map(font => Font.loadAsync(font));
}
export default class App extends React.Component {
constructor() {
super();
this.state = {
isReady: false
};
}
async _loadAssetsAsync() {
const imageAssets = cacheImages([
require('./assets/images/splash.png'),
require('./assets/images/splash-logo.png'),
require('./assets/images/hotdrink.png'),
require('./assets/images/insta.png'),
require('./assets/images/twitter.png'),
require('./assets/images/facebook.png'),
require('./assets/images/yelp.png'),
]);
store.updatePrefix(Expo.Linking.makeUrl('/'));
const fontAssets = cacheFonts(
[{
Roboto: require("native-base/Fonts/Roboto.ttf"),
Roboto_medium: require("native-base/Fonts/Roboto_medium.ttf"),
Ionicons: require("@expo/vector-icons")
}]
);
await Promise.all([...imageAssets, ...fontAssets]);
}
render() {
if (!this.state.isReady) {
return (<AppLoading
startAsync={this._loadAssetsAsync}
onFinish={() => this.setState({isReady: true})}
onError={(error) => console.log('app js: ', error)}
/>)
}
return (
<Root>
<RootNav uriPrefix={store.prefix} />
</Root>
)
}
}
Geocoder.init(Config.google_maps_key);
编辑:进行以下建议的更改后: - 将 Assets 导入从 import * as Asset from 'expo-asset';
更改为 import { Asset } from 'expo-asset';
- 我现在收到此错误,与之前的略有不同 我最初写过 - TypeError:asset.downloadAsync 不是函数。 (在“asset.downloadAsync()”中,“asset.downloadAsync”未定义)
。
最佳答案
看起来这应该只是 import { Asset } from "expo-asset";
而不是 import * as Asset from 'expo-asset';
。
我想通了,因为 import
语句看起来很奇怪,所以我将你的 App.js 复制到一个新的 create-react-native-app 安装中,添加了一些依赖项并注释掉了似乎无关的位或对未在此处发布的文件的引用。我得到了 TypeError: Asset.fromModule is not a function。 (在 'Asset.fromModule(image)' 中,'Asset.fromModule' 未定义)
警告,更改了导入行,并加载了应用程序(它没有做太多事情,但是有很多注释掉了预期)。
import
语句很容易意外出错,而不会在导入行上实际产生错误,可能值得回顾一下 as
在使用时的工作原理,请参阅the docs on MDN
关于javascript - Asset.fromModule 不是函数。 (在 'Asset.fromModule(image)' 中, 'Asset.fromModule' 未定义),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57422000/
更新到 Expo sdk 34 后,出现此错误:TypeError:Asset.fromModule 不是函数。 (在“Asset.fromModule(image)”中,“Asset.fromMod
我有一个 Expo(版本 34.0.1)应用程序,带有 React native webview。我想将位于 ./assets/webApp/index.html 的静态网站加载到此 webview
我是一名优秀的程序员,十分优秀!