javascript - 错误 : Couldn't find any screens for the navigator. 您是否将任何屏幕定义为其子屏幕?

标签 javascript react-native react-navigation-v5

我正在尝试制作动态 tab.screen。 我的代码是这样的:

import React from 'react';
import { Text, View, TouchableOpacity, Modal } from 'react-native';
import AsyncStorage from '@react-native-community/async-storage';
import Icon from 'react-native-vector-icons/FontAwesome5';
import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
import Home from '../mainscreen/GeneralScreen';
import Core from '../mainscreen/CoreScreen';
import Docs from '../mainscreen/GeneralScreen';
import ESS from '../mainscreen/CoreScreen';
import General from '../mainscreen/GeneralScreen';
import HR from '../mainscreen/CoreScreen';
import Payroll from '../mainscreen/GeneralScreen';
import Server from '../mainscreen/CoreScreen';

const Tab = createBottomTabNavigator();
const tabcomponents = {
  "Home" : Home,
  "Core" : Core,
  "Docs" : Docs,
  "ESS" : ESS,
  "General" : General,
  "HR" : HR,
  "Payroll" : Payroll,
  "Server" : Server
};

class TabNavigator extends React.Component {

  constructor() {
      super();    
      this.state = {
         dashboardtab:[],                 
      }
      this.tabnavigatorasync();      
    }

  tabnavigatorasync = async () => {
    try {
      const dashboardtab = await AsyncStorage.getItem('dashboardtab');    
      const dashboardtabParse = JSON.parse(dashboardtab);      
      this.setState({dashboardtab: dashboardtabParse});      
    } catch (error) {      
    }
  }

  render(){    
    const tabnavigatorRender = this.state.dashboardtab.map((item, index) => {
      const tabcomponentsrender = tabcomponents[item.admintab.label];    
      return <Tab.Screen name={item.admintab.label} component={tabcomponentsrender} key={index}/>                         
    });

    return(
          <Tab.Navigator>
            {tabnavigatorRender}                        
          </Tab.Navigator>
        )
  }
}

export default TabNavigator;

结果出现这样的错误:

Error: Couldn't find any screens for the navigator. Have you defined any screens as its children?

我编写的代码有问题吗?

最佳答案

由于错误表明您在 TabNavigator 内没有任何屏幕。

当组件安装时,数组为空,稍后加载数据。

所以你可以像下面这样解决这个问题

 render(){    
    const tabnavigatorRender = this.state.dashboardtab.map((item, index) => {
      const tabcomponentsrender = tabcomponents[item.admintab.label];    
      return <Tab.Screen name={item.admintab.label} component={tabcomponentsrender} key={index}/>                         
    });

   // Add this to return null or you can also show <ActivityIndicator/>
   if(this.state.dashboardtab.length===0)
       return null;

    return(
          <Tab.Navigator>
            {tabnavigatorRender}                        
          </Tab.Navigator>
        )
  }

还从 componentDidMount 调用 tabnavigatorasync,而不是从构造函数调用它。

componentDidMount(){
  this.tabnavigatorasync(); 
}

关于javascript - 错误 : Couldn't find any screens for the navigator. 您是否将任何屏幕定义为其子屏幕?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65391386/

相关文章:

Javascript - 发送编码二进制 (zip) 文件数据并在 C# 中对其进行解码

react-native - 将原生 redux 映射状态 react 到 props 不起作用

react-native - React Native - 如何在字体缩放后检测字体大小?

reactjs - 不变违规 : Tried to register two views with the same name RNCSafeAreaProvider error with @react-navigation/stack

javascript - 选择新选项时动态刷新

javascript - 使用defineProperty定义getter

javascript - 如何为 graphQL 解析器查询 firestore()?

javascript - 没有 CSRF token 的 React Native Fetch 请求失败

react-native - React Navigation Top Bar 获得相同的高度(NOT)依赖于它自己的组件

react-native - 如何在 React Navigation 5 中将父函数传递给子屏幕?