嵌套在抽屉中时选项卡导航滞后

Tab navigation lag when nested in drawer

我在抽屉中嵌套选项卡时遇到问题。不幸的是,导航到每个选项卡都很慢,而且它们似乎有很多延迟。

但是,当我删除抽屉导航器并使其成为唯一的选项卡导航器时,在不同选项卡屏幕之间导航明显更好。

How can I make it so that their is no delay between the tabs when the tabs are nested in to the drawer?

{ *

在 Mateusz 的帮助下,我设法查明了问题所在。我通过渲染四个相同的组件来测试延迟。第一个测试使用

 children={() => {
           return <NfcWifiConfig />;
         }}

延迟仍然存在

但是后来,当我使用

component={NfcWifiConfig}

延迟完全消失,导航 运行 顺畅如预期。所以我现在的问题是,我从这里去哪里?我将如何使用此语法传递道具?

我当前的代码是:

const DrawerComponent = ({
  Bunch of props here
}) => {
  return (

    <Drawer.Navigator
      drawerType="back"

      drawerContent={(props) => {
        return (
          <DrawerContent
            {...props}
          />
        );
      }}
     >

      {/* TABS */}

      <Drawer.Screen
        name="MainHome"
        children={({navigation}) => {
          return (
            <>
              <StatusBar backgroundColor={homeColor} barStyle="dark-content" />
              <Navbar navigation={navigation} userimage={userimage} />
              <Tabs.Navigator>

              {/* HOME STACK */}
              <Tabs.Screen
                name="Profile"
                children={() => {
                  return (
                    <>
                       <MainStackNavigator
                         {Bunch of props here}
                        />
                     </>
                    ;
                 }}
               />

               {/* SEARCH SCREEN */}
               <Tabs.Screen
                  name="Search"
                  children={() => {
                    return (
                      <>
                       <StatusBar barStyle="dark-content" />
                       <SearchStack
                        { Bunch of props here }
                       />
                     </>
                    );
                  }}
                />

                {/* NFC-SOCIAL SCREEN */}
                <Tabs.Screen name="Activate" component={NfcConfig} />

                {/* NFC-WIFI SCREEN */}
                <Tabs.Screen name="WiFi" component={NfcWifiConfig} />

              </Tabs.Navigator>
            </>
          );
        }}
      />

      {/* Add Links Screen */}

      <Drawer.Screen
        name="Add Links"
        children={({navigation}) => {
          return (
            <AddLinksScreen
               { Bunch of props here }
            />
          );
        }}
      />

      {/* Following Screen */}

      <Drawer.Screen
        name="Followers"
        children={({navigation}) => {
          return (
            <FollowerStack
              { Bunch of props here }
            />
          );
        }}
      />

      {/* Following Screen */}

      <Drawer.Screen
        name="Following"
        children={({navigation}) => {
          return (
           <FollowingStack
             { Bunch of props here }
           />
          );
        }}
      />

    </Drawer.Navigator>
  );
};

此外,添加链接屏幕和 followers/following 屏幕工作正常。导航到它们可以高效无延迟地工作。但是选项卡 => 主页堆栈、搜索屏幕和其他两个在它们之间导航时会有严重的延迟。

从标签里面的内容来看,最后两个标签很轻,内容不多。我尝试过注释掉繁重的选项卡屏幕并仅使用两个轻量级组件,但结果相同。让我相信这不是问题。

所以我设法解决了这个问题。当我使用:

 children={() => {
           return <NfcWifiConfig props{props} />;
         }}

存在延迟。但是,当我使用:

component={NfcWifiConfig}

延迟消失了。但是,我的道具没有通过。所以我所做的是使用 React Context 将我的 props 传递给所有需要它的不同组件,仅此而已,延迟消失了,组件正在按我的需要接收 props。

此外,使用 React 上下文时代码更清晰,因此我强烈推荐它。