Загрузка исходной ошибки шрифта
Я получаю сообщение об ошибке: You started loading 'Roboto_medium', but used it before it finished loading
при использовании родной базы.
![enter image description here]()
Я следил за инструкциями на официальной странице.
Чтобы создать реагировать на собственное приложение, я использую приложение create-react-native-app
.
App.js
export default class App extends React.Component {
async componentWillMount() {
await Expo.Font.loadAsync({
'Roboto': require('native-base/Fonts/Roboto.ttf'),
'Roboto_medium': require('native-base/Fonts/Roboto_medium.ttf'),
'Ionicons': require('@expo/vector-icons/fonts/Ionicons.ttf'),
});
}
render() {
return (
<Container>
<StatusBar hidden={true} />
<Button>
<Text>
Button
</Text>
</Button>
<ListaItens />
</Container>
);
}
}
Ответы
Ответ 1
вам нужно дождаться загрузки шрифтов. Вы можете сделать что-то подобное
import React from "react";
import { StatusBar } from "react-native";
import { Container, Button, text, ListItem, Text } from "native-base";
import Expo from "expo";
export default class App extends React.Component {
constructor(props) {
super(props);
this.state = { loading: true };
}
async componentWillMount() {
await Expo.Font.loadAsync({
Roboto: require("native-base/Fonts/Roboto.ttf"),
Roboto_medium: require("native-base/Fonts/Roboto_medium.ttf"),
Ionicons: require("@expo/vector-icons/fonts/Ionicons.ttf"),
});
this.setState({ loading: false });
}
render() {
if (this.state.loading) {
return <Expo.AppLoading />;
}
return (
<Container>
<StatusBar hidden={true} />
<Button>
<Text>Button</Text>
</Button>
<ListItem />
</Container>
);
}
}
Ответ 2
Если кто-то сталкивается с этой проблемой с семейством шрифтов "MaterialIcons", у меня возникла аналогичная проблема и я нашел следующее решение:
https://javascriptrambling.blogspot.com.au/2018/03/expo-icon-fonts-with-react-native-and.html
Вам в основном нужно:
- Установите шрифты (используя установку npm)
- Сделайте Font.loadAsync на шрифтах в вашей функции componentWillMount().
- Не забывайте отмечать функцию componentWillMount() как async
- Условно отображается либо как "загрузка", либо представление в зависимости от состояния "загруженного" флага.
Например:
import React from 'react';
import { View } from 'react-native';
import { Avatar } from 'react-native-elements';
import { AppLoading, Font } from 'expo';
import FontAwesome
from './node_modules/@expo/vector-icons/fonts/FontAwesome.ttf';
import MaterialIcons
from './node_modules/@expo/vector-icons/fonts/MaterialIcons.ttf';
export default class App extends React.Component {
state = {
fontLoaded: false
};
async componentWillMount() {
try {
await Font.loadAsync({
FontAwesome,
MaterialIcons
});
this.setState({ fontLoaded: true });
} catch (error) {
console.log('error loading icon fonts', error);
}
}
render() {
if (!this.state.fontLoaded) {
return <AppLoading />;
}
return (
<View>
<Text>My App</Text>
<Avatar
small
rounded
icon={{ name: 'add' }}
/>
</View>
);
}
}
Ответ 3
вы должны пойти node_modules/yourPlugin/index.js найти fontFamily и удалить его
Ответ 4
Этот новый код для expo SDK 35, который был изменен из ответа @akhil xavier
Сначала установите expo-шрифт
expo install 'expo-font'
здесь App.js
import React from "react";
import * as Font from "expo-font";
import { ActivityIndicator } from "react-native";
import { Root } from "native-base";
export default class App extends React.Component {
constructor(props) {
super(props);
this.state = { loading: true };
}
async componentWillMount() {
await Font.loadAsync({
Roboto: require("native-base/Fonts/Roboto.ttf"),
Roboto_medium: require("native-base/Fonts/Roboto_medium.ttf"),
Ionicons: require("@expo/vector-icons/build/vendor/react-native-vector-icons/Fonts/Ionicons.ttf"),
});
this.setState({ loading: false });
}
render() {
if (this.state.loading) {
return <ActivityIndicator />;
}
return (
<Root>
<RootPage /> // starter component (i.e. nav)
</Root>
);
}
}
Ответ 5
Одна из причин, по которой он должен загружать шрифт, заключается в том, что вы используете компонент Native Base Text. Если вместо этого вы импортируете компонент React Native Text, вам даже не придется загружать шрифты, и вы не увидите эту ошибку.