我目前正在实现Reaction导航的Tab特性,根据官方文档,当我try 定义Tab.Navigator组件时,我遇到了一条警告消息.为了定制tabBarIcon,我遵循了文档中提供的代码示例:

const Tab = createBottomTabNavigator();
const BottomTabScreen = () => {
  return (
    <Tab.Navigator
      screenOptions={({route}) => ({
        tabBarHideOnKeyboard: true,
        tabBarShowLabel: false,
        headerShown: false,
        tabBarStyle: {
          height: 70,
        },
        tabBarIcon: ({focused, size, color}) => {
          let iconName;
          if (route.name === 'Home') {
            iconName = focused ? 'home-sharp' : 'home-outline';
          } else if (route.name === 'Search') {
            iconName = focused ? 'search' : 'ios-search-outline';
          } else if (route.name === 'Activity') {
            iconName = focused ? 'ios-heart' : 'ios-heart-outline';
          } else if (route.name === 'Profile') {
            iconName = focused ? 'ios-person-circle' : 'ios-person-outline';
            size = focused ? size + 3 : size;
          }
          return <Ionic name={iconName} size={size} color={color} />;
        },
      })}>
      <Tab.Screen name="Home" component={Home} />
      <Tab.Screen name="Search" component={Search} />
      <Tab.Screen name="Activity" component={Activity} />
      <Tab.Screen name="Profile" component={Profile} />
    </Tab.Navigator>
  );
};

但是,我收到以下警告消息:

"在渲染过程中不要定义组件.Reaction将看到一个新的 每个呈现上的组件类型,并销毁整个子树的DOM node 和状态."

我想知道是否有办法解决这一警告信息.如果在这件事上有任何帮助或指导,我将不胜感激.谢谢.

推荐答案

将零部件定义移出导航器:

// moved
const TabIcon = ({focused, size, color}) => {
          let iconName;
          if (route.name === 'Home') {
            iconName = focused ? 'home-sharp' : 'home-outline';
          } else if (route.name === 'Search') {
            iconName = focused ? 'search' : 'ios-search-outline';
          } else if (route.name === 'Activity') {
            iconName = focused ? 'ios-heart' : 'ios-heart-outline';
          } else if (route.name === 'Profile') {
            iconName = focused ? 'ios-person-circle' : 'ios-person-outline';
            size = focused ? size + 3 : size;
          }
          return <Ionic name={iconName} size={size} color={color} />;
};

const Tab = createBottomTabNavigator();
const BottomTabScreen = () => {
  return (
    <Tab.Navigator
      screenOptions={({route}) => ({
        tabBarHideOnKeyboard: true,
        tabBarShowLabel: false,
        headerShown: false,
        tabBarStyle: {
          height: 70,
        },
        tabBarIcon: (props) => <TabIcon {...props} />, // new
      })}>
      <Tab.Screen name="Home" component={Home} />
      <Tab.Screen name="Search" component={Search} />
      <Tab.Screen name="Activity" component={Activity} />
      <Tab.Screen name="Profile" component={Profile} />
    </Tab.Navigator>
  );
};

Reactjs相关问答推荐

为什么这个'Suspense'子组件在挂起promise解决后会丢失它的状态,而不是呈现?<>

在Reaction中更新状态时,我将变得未定义

使用Reaction-Hook-Form时未激发React.js onBlur事件

在Reaction中单击并显示子组件延迟/动画

在React中映射对象数组时,如何正确呈现JSX.Element或React.ReactNode类型?

有没有可能在next.js和ssr中使用tsps?

为什么我得不到我想要的数据?

安装使用环境的BIT组件的依赖项

状态更改时的rtk查询触发器

如何更改TimePicker中下拉菜单的背景 colored颜色 和字体 colored颜色 - MUI React

为 Next.js 应用程序目录中的所有页面添加逻辑的全局文件是什么?

Mui 在 TextField 标签上添加工具提示显示两个工具提示框

对于 ref 上的可见 prop 或 open 方法来react 组件,哪种方式更好?

当`useSelector`回调中的属性值更新时,将会使用更新后的值吗?

如何实现 redux 工具包来注册用户?

react - 警告:列表中的每个子元素都应该有一个独特的 keys props ,即使我已经设置了 keys

Reactjs 表单未反映提交时的更改

如何在 Reactjs 中判断受保护路由上的用户角色?

如何将 id 从页面传递到另一个页面?

React useEffect hooks return () => cleanup() vs return cleanup