expo eject
を使用する前は、私の反応ネイティブアプリは問題なく動作していました。アプリをビルドしてiOSアプリストアにリリースするつもりなので、これを取り除きました。排出された後、react-native run-ios
を使用して排出されたアプリを起動しようとするとすぐに、以下の例外が発生します。
この問題の原因と対処方法を誰かが理解するのを手伝っていただけませんか?
ネイティブバージョンを次のように反応させます。
react-native-cli: 2.0.1
react-native: 0.61.5
TypeError: null is not an object (evaluating 'SplashScreen.preventAutoHide')
This error is located at:
in AppLoading (at AppLoading.js:52)
in AppLoading (at App.js:464)
in App (at renderApplication.js:40)
in RCTView (at AppContainer.js:101)
in RCTView (at AppContainer.js:119)
in AppContainer (at renderApplication.js:39)
preventAutoHide
SplashScreen.js:4:21
AppLoading#constructor
AppLoadingNativeWrapper.js:6:8
renderRoot
[native code]:0
runRootCallback
[native code]:0
renderApplication
renderApplication.js:52:52
runnables.appKey.run
AppRegistry.js:116:10
runApplication
AppRegistry.js:197:26
callFunctionReturnFlushedQueue
[native code]:0
Docsから明らかなように、SplashScreenはexpoアプリ用の組み込みAPIであり、それをイジェクトしたため、使用できないためエラーがスローされます。
これはドキュメント expo splashscreen で確認できます。
まず、ダウンロードする必要がありますnpm i expo-splash-screen
次に、インポートステートメントを次のように変更します。
import * as SplashScreen from 'expo-splash-screen';
それが役に立てば幸い。疑いなくお気軽に
このSO=ページに目を通し、いくつかのリンク、特に this expoページを掘り下げて、このためのソリューションを提供した後、アプリを入手することができました。約3時間の闘争の後に実行されています。機能コンポーネントの例は追加されていないため、誰かがここにソリューションを探しに来た場合に備えて、以下のコードを共有しています。
import { Asset } from "expo-asset";
import * as Font from "expo-font";
import React, { useState, useEffect } from "react";
import { Platform, StatusBar, StyleSheet, View } from "react-native";
import { Ionicons } from "@expo/vector-icons";
import * as SplashScreen from 'expo-splash-screen';
import AppNavigator from "./navigation/AppNavigator";
export default props => {
const [isLoadingComplete, setLoadingComplete] = useState(false);
const theme = {
...DefaultTheme,
roundness: 2,
colors: {
...DefaultTheme.colors,
primary: "#E4002B",
accent: "#E4002B",
},
};
useEffect(() => {
async function asyncTasks() {
try {
await SplashScreen.preventAutoHideAsync();
} catch (e) {
console.warn(e);
}
await loadResourcesAsync()
setLoadingComplete(true);
}
asyncTasks()
}, []);
return (
!isLoadingComplete && !props.skipLoadingScreen ? null :
<View style={styles.container}>
{Platform.OS === "ios" && <StatusBar barStyle="default" />}
<AppNavigator />
</View>
);
}
async function loadResourcesAsync() {
await Promise.all([
Asset.loadAsync([
require("./assets/images/logo.png") // Load your resources here (if any)
]),
Font.loadAsync({
// You can remove this if you are not loading any fonts
"space-mono": require("./assets/fonts/SpaceMono-Regular.ttf"),
}),
]);
await SplashScreen.hideAsync();
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: "#fff",
},
});