如何在使用React-Navigation和Expo时实现一次字体?

时间:2017-07-13 16:24:31

标签: javascript react-native fonts react-navigation expo

我目前正在为我的项目使用Expo和React-Navigation。当我使用React-Navigation和Expo时,我很难找到并在我的项目中实现自定义字体的解决方案。

以下是Expo实施自定义字体的方法:https://docs.expo.io/versions/v15.0.0/guides/using-custom-fonts.html

Expo提供了一种从资源文件夹加载字体的异步方法,这需要将这几行代码添加到我的顶级组件定义的任何位置的componentDidMount()中:

(从先前放置的链接复制)

componentDidMount() {
    Font.loadAsync({
      'open-sans-bold': require('./assets/fonts/OpenSans-Bold.ttf'),
    });
}

理论上,我可以在我的应用程序的每个页面中实现它,但这会导致我的应用程序加载速度变慢。理想情况下,我只想在我的顶级组件中实现Expo的步骤一次(在此解释:Using custom Font in react native with expo, loading font every time),因为在应用程序的每个组件中实现此解决方案会导致加载速度变慢。 / p>

在我的App.js中,我导出导航器而不是包含componentDidMount()函数调用的组件。这就是我现在的App.js的样子。

export default SimpleApp = DrawerNavigator({
  Login: {
    screen: SomeComponent,
    navigationOptions: {
      acceptPan: false,
    },
  },
  MainTabs: {
    screen: SomeTabNavigator,
    navigationOptions: {
      tabBarPosition:'top',
      headerLeft: null
    }
  }
});

在这里,我导出一个DrawerNavigator,它不是一个组件。所以现在,我实际上甚至没有一个顶级组件。重申一下,我想让我的App.js导出一些保留导航的顶级组件,并允许我实现Expo的导入自定义字体的步骤。

谢谢!

1 个答案:

答案 0 :(得分:2)

在尝试为我的应用程序实现自定义状态栏时,我无意中偶然发现了答案。这是我找到解决方案的链接(请参阅ezzak的回复)。

https://github.com/react-community/react-navigation/issues/1441

基本上,您实际上可以将导航器视为组件!

不要忘记将所有课程组成部分的第一个字母大写。