web-dev-qa-db-ja.com

Reactネイティブ:TypeError:nullはオブジェクトではありません( 'SplashScreen.preventAutoHide'を評価しています)

expo ejectを使用する前は、私の反応ネイティブアプリは問題なく動作していました。アプリをビルドしてiOSアプリストアにリリースするつもりなので、これを取り除きました。排出された後、react-native run-iosを使用して排出されたアプリを起動しようとするとすぐに、以下の例外が発生します。

この問題の原因と対処方法を誰かが理解するのを手伝っていただけませんか?

ネイティブバージョンを次のように反応させます。

react-native-cli: 2.0.1
react-native: 0.61.5

enter image description here

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
6
user3391835

Docsから明らかなように、SplashScreenはexpoアプリ用の組み込みAPIであり、それをイジェクトしたため、使用できないためエラーがスローされます。

これはドキュメント expo splashscreen で確認できます。

まず、ダウンロードする必要がありますnpm i expo-splash-screen

次に、インポートステートメントを次のように変更します。

import * as SplashScreen from 'expo-splash-screen';

それが役に立てば幸い。疑いなくお気軽に

3
Gaurav Roy

この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",
  },
});
0
Hashir Baig