当前位置: 首页 > 知识库问答 >
问题:

检查BottomNavigation-React Native的渲染方法

许天逸
2023-03-14

我正在react native项目中创建底部导航。对于以下编码,它工作正常。

import React from 'react';
import { createMaterialBottomTabNavigator } from '@react-navigation/material-bottom-tabs';
import { MaterialCommunityIcons } from 'react-native-vector-icons';
import { NavigationContainer } from '@react-navigation/native';

import Accounts from './src/components/Accounts';
// ...importing other screens here...

const Tab = createMaterialBottomTabNavigator();

function MyTabs() {
  return (
    <Tab.Navigator
      initialRouteName="Feed"
      activeColor="#e91e63"
      labelStyle={{ fontSize: 12 }}
      style={{ backgroundColor: 'tomato' }}>
      <Tab.Screen name="Accounts" component={Accounts} />
      ...Other screens comes here...
    </Tab.Navigator>
  );
}

export default function App() {
  return (
    <NavigationContainer>
      <MyTabs />
    </NavigationContainer>
  );
}

但是我需要在标签上添加图标。所以我在屏幕上添加了以下道具

<Tab.Screen
  name="Accounts"
  component={Accounts}
  options={{
    tabBarLabel: 'Home',
    tabBarIcon: ({ color, size }) => (
      <MaterialCommunityIcons name="home" color={color} size={size} />
    ),
  }}
/>

添加这些道具后,我得到以下错误

不变冲突:元素类型无效:需要字符串(对于内置组件)或类/函数(对于复合组件),但未定义。您可能忘记了从定义组件的文件中导出组件,或者您可能混淆了默认导入和命名导入

根据文件,我做的每件事都是正确的。建议使用React导航文档中的道具。我的编码有什么问题?我需要在我的标签图标

共有3个答案

巩阳秋
2023-03-14

我相信你必须在标签上创建图标。航海家道具。

下面是一个使用不同图标包的示例,但其工作原理相同:https://reactnavigation.org/docs/en/tab-based-navigation.html

// You can import Ionicons from @expo/vector-icons if you use Expo or
// react-native-vector-icons/Ionicons otherwise.
import { Ionicons } from '@expo/vector-icons';

// (...)

export default function App() {
  return (
    <NavigationContainer>
      <Tab.Navigator
        screenOptions={({ route }) => ({
          tabBarIcon: ({ focused, color, size }) => {
            let iconName;

            if (route.name === 'Home') {
              iconName = focused
                ? 'ios-information-circle'
                : 'ios-information-circle-outline';
            } else if (route.name === 'Settings') {
              iconName = focused ? 'ios-list-box' : 'ios-list';
            }

            // You can return any component that you like here!
            return <Ionicons name={iconName} size={size} color={color} />;
          },
        })}
        tabBarOptions={{
          activeTintColor: 'tomato',
          inactiveTintColor: 'gray',
        }}>
        <Tab.Screen name="Home" component={HomeScreen} />
        <Tab.Screen name="Settings" component={SettingsScreen} />
      </Tab.Navigator>
    </NavigationContainer>
  );
}
徐翔
2023-03-14

如果有人遇到此问题,请检查您使用的@react导航包的版本。如果其中一个包使用的主版本与其他包不同,则可能会发生此错误。如果是这种情况,只需降级或升级不匹配的包。升级通常需要更改。通常会有关于升级之间发生更改的发行说明。以下是@react导航/物料底部选项卡的升级说明。

蓬威
2023-03-14

这可以通过导入MaterialCommunityIcons(如

从'react native vector icons/materialcommunitycons'导入MaterialCommunitycons

 类似资料:
  • 图片

  • 在 Hexo 中,有两个方法可用于渲染文件或字符串,分别是非同步的 hexo.render.render 和同步的 hexo.render.renderSync,这两个方法的使用方式十分类似,因此以下仅以非同步的 hexo.render.render 为例。 渲染字符串 在渲染字符串时,您必须指定 engine,如此一来 Hexo 才知道该使用哪个渲染引擎来渲染。 hexo.render.rend

  • 6.1 渲染模板 一旦你拥有一个模版文件,你可以通过给一个map来给它传递数据。 map是一个变量及赋予的值的集合,模板使用它来得到变量的值,或者对于块标签求值。 它的渲染函数有一个可选的变量键值对map 通过 ctx.Render() 方法来渲染模板,例如: func (r *Render) Serve(ctx *faygo.Context) error { return ctx.Ren

  • 一个 zDoc 文档集合可以被输出成为任何介质 渲染整个文档集合 在 zDoc 的观点里,一次仅仅渲染一个文档是不够的。通常你会写很多文档, 然后放到一个文件夹下面,我们在 pages.html 里声明了一个 zDoc工作目录的约定。 你解析出来这个目录的结构大约参见如下的对象结构 public class ZDocHome { protected ZDir src; pr

  • 在Ember应用程序中,容器维护对象实例以检查对象。 您可以使用Container选项卡检查对象,如下所示 - 接下来,单击对象名称以使用对象检查器检查实例。 在上面标记的区域中,使用重新加载图标重新加载容器和搜索框以搜索实例。 渲染性能 灰烬检查器允许您使用“ Render Performance选项卡计算应用程序的渲染时间。 使用“ Reload按钮计算初始应用程序引导时组件和模板的呈现时间,

  • 但thymeleaf无法呈现它,因为div标记未在其启动的中关闭。有没有办法把上面的jsp代码转换成thymeleaf。 我正在使用thymeleaf 2.0.17和spring3