#javascript #reactjs #react-native
#javascript #reactjs #реагировать — родной
Вопрос:
Привет, я относительно новичок в React Native. В любом случае моя проблема в том, что я пытаюсь изменить шрифт своего текста и хочу убедиться, что после загрузки шрифтов я хочу, чтобы экран загрузки заканчивался.
Тем не менее, я получаю эту ошибку :
Ошибка: приложение (…): из рендеринга ничего не было возвращено. Обычно это означает, что оператор return отсутствует. Или, чтобы ничего не отображать, верните null .
Эта ошибка находится по адресу: в приложении (созданном ExpoRoot) в ExpoRoot (в renderApplication.js:45) в RCTView (в View.js:34) в View (в AppContainer.js: 106) в DevAppContainer (в AppContainer.js: 121) в RCTView (в View.js: 34) в представлении (в AppContainer.js: 132) в AppContainer (в renderApplication.js:39)
Это мой App.js
import { StatusBar } from 'expo-status-bar';
import React from 'react';
import { render } from 'react-dom';
import { Button, StyleSheet, Text, View } from 'react-native';
import AppNavigator from './src/navigation/Navigator';
import * as Font from 'expo-font';
import {AppLoading} from 'expo-app-loading';
export default class App extends React.Component {
state = {
isFontLoaded : false
}
async componentDidMount(){
await Font.loadAsync({
"SemiBold" : require('./src/fonts/Montserrat-Regular.ttf'),
"Medium" : require('./src/fonts/Montserrat-Medium.ttf'),
"Regular" : require('./src/fonts/Montserrat-Regular.ttf')
});
this.setState({isFontLoaded:true})
}
render(){
return (
(this.state.isFontLoaded === true) ? (<AppNavigator/>):(AppLoading)
// AppLoading
);
}
}
Если вам что-нибудь еще потребуется, пожалуйста, дайте мне знать.
Заранее спасибо.
Комментарии:
1. Является
AppLoading
ли элемент JSX? Если это так, то его следует обернуть<AppLoading />
2. @choz Я уже пробовал это, и я получаю следующую ошибку:
3. Ошибка @choz: недопустимый тип элемента: ожидалась строка (для встроенных компонентов) или класс / функция (для составных компонентов), но получено: не определено. Вероятно, вы забыли экспортировать свой компонент из файла, в котором он определен, или вы могли перепутать импорт по умолчанию и именованный импорт. Проверьте метод рендеринга
App
.4. Затем проверьте свой
expo-app-loading
файл или, по крайней мере, опубликуйте его здесь.5. expo-app-loading — это библиотека, и что именно я должен искать?
Ответ №1:
Импортируйте следующим образом, например
import AppLoading from 'expo-app-loading'; // this way
render(){
if(!this.state.isFontLoaded){
return <AppLoading />
}
return <AppNavigator />
}
Комментарии:
1. Однако спасибо за ответ, я получаю эту ошибку сейчас: недопустимый тип элемента: ожидал строку (для встроенных компонентов) или класс / функцию (для составных компонентов), но получил: не определено. Вероятно, вы забыли экспортировать свой компонент из файла, в котором он определен, или вы могли перепутать импорт по умолчанию и именованный импорт. Проверьте метод рендеринга
App
.2. Эта ошибка обычно возникает, когда у нее недопустимый импорт. Проверьте свой импорт
import AppNavigator from './src/navigation/Navigator';
иimport {AppLoading} from 'expo-app-loading';
3. Эй, итак, я провел некоторое исследование, и я думаю, что правильный способ импорта загрузки приложений заключается в следующем : AppNavigator работает отлично, так как без загрузки приложения приложение работает должным образом. Однако теперь я получаю эту ошибку с обновленным импортом для загрузки приложения: «Предупреждение: не удается выполнить обновление состояния реакции для размонтированного компонента. Это не операция, но это указывает на утечку памяти в вашем приложении. Чтобы исправить, отмените все подписки и асинхронные задачи в методе componentWillUnmount .’