React native 不变冲突:对象作为子对象无效。如何解释错误消息并找到错误?

React native 不变冲突:对象作为子对象无效。如何解释错误消息并找到错误?,react-native,React Native,由于某些原因,我的代码不再运行,我无法跟踪错误 调试器中出现如下错误: Invariant Violation: Objects are not valid as a React child (found: object with keys {_40, _65, _55, _72}). If you meant to render a collection of children, use an array instead. in LoginScreen (at SceneView.js

由于某些原因,我的代码不再运行,我无法跟踪错误

调试器中出现如下错误:

Invariant Violation: Objects are not valid as a React child (found: object with keys {_40, _65, _55, _72}). If you meant to render a collection of children, use an array instead.
    in LoginScreen (at SceneView.js:9)
    in SceneView (at SwitchView.js:12)
    in SwitchView (at createNavigator.js:61)
    in Navigator (at createAppContainer.js:429)
    in NavigationContainer (at App.js:19)
    in App (at renderApplication.js:40)
    in RCTView (at View.js:35)
    in View (at AppContainer.js:98)
    in RCTView (at View.js:35)
    in View (at AppContainer.js:115)
    in AppContainer (at renderApplication.js:39)

This error is located at:
    in LoginScreen (at SceneView.js:9)
    in SceneView (at SwitchView.js:12)
    in SwitchView (at createNavigator.js:61)
    in Navigator (at createAppContainer.js:429)
    in NavigationContainer (at App.js:19)
    in App (at renderApplication.js:40)
    in RCTView (at View.js:35)
    in View (at AppContainer.js:98)
    in RCTView (at View.js:35)
    in View (at AppContainer.js:115)
    in AppContainer (at renderApplication.js:39)
据我所知,这是说我试图显示一个对象。但我不认为我是。 这是我的代码,第一个配置导航的app.js

//imports are omitted
export default class App extends React.Component {
  render() {
    return <AppContainer />;
  }
}

const CallLogStackNav = createStackNavigator({
  Telefonlogg: {
    screen: CallHistoryScreen,
    navigationOptions: ({navigation}) => {
      return {
        headerTitle: 'Telefonlogg',
        headerLeft: (
          <Icon
            style={{paddingLeft: 10}}
            onPress={() => navigation.openDrawer()}
            name="menu"
          />
        ),
      };
    },
  },
  Billing: {
    screen: BillingScreen,
    navigationOptions: ({navigation}) => {
      return {
        headerTitle: 'Time registrering',
      };
    },
  },
});

const SettingsStackNav = createStackNavigator({
  Instillinger: {
    screen: SettingsScreen,
    navigationOptions: ({navigation}) => {
      return {
        headerLeft: (
          <Icon
            style={{paddingLeft: 10}}
            onPress={() => navigation.openDrawer()}
            name="menu"
          />
        ),
        headerTitle: 'Instillinger',
      };
    },
  },
  Svarteliste: {
    screen: BlacklistScreen,
    navigationOptions: ({navigation}) => {
      return {
        headerTitle: 'Svarteliste',
      };
    },
  },
});

const AppDrawerNav = createDrawerNavigator({
  Hjem: {screen: CallLogStackNav},
  Instillinger: {screen: SettingsStackNav},
});
const AppSwitchNav = createSwitchNavigator({
  Login: {screen: LoginScreen},
  Dashboard: {screen: AppDrawerNav},
});

const AppContainer = createAppContainer(AppSwitchNav);
//忽略导入
导出默认类App扩展React.Component{
render(){
返回;
}
}
const CallLogStackNav=createStackNavigator({
电话会议:{
屏幕:CallHistoryScreen,
导航选项:({navigation})=>{
返回{
标题:“Telefonlogg”,
左校长:(
navigation.openDrawer()}
name=“菜单”
/>
),
};
},
},
账单:{
屏幕:BillingScreen,
导航选项:({navigation})=>{
返回{
标题:“时间登记”,
};
},
},
});
const SettingsStackNav=createStackNavigator({
灌输者:{
屏幕:设置屏幕,
导航选项:({navigation})=>{
返回{
左校长:(
navigation.openDrawer()}
name=“菜单”
/>
),
标题:“灌输者”,
};
},
},
Svarteliste:{
屏幕:黑名单屏幕,
导航选项:({navigation})=>{
返回{
标题:“Svarteliste”,
};
},
},
});
const APPDOURNAV=CreatePaureRNAVIGATOR({
Hjem:{screen:CallLogStackNav},
灌输者:{screen:settingssstacknav},
});
const AppSwitchNav=createSwitchNavigator({
登录:{screen:LoginScreen},
仪表板:{screen:AppDrawerNav},
});
const AppContainer=createAppContainer(AppSwitchNav);
这里是“LoginScreen”,我认为它给了我一个错误(再次省略导入):

类登录屏幕扩展组件{
建造师(道具){
超级(道具);
此.state={
孤岛加载:是的,
用户名:“”,
密码:“”,
};
}
异步组件didmount(){
const callHistory=await callHistory.request.fetchCallHistory();
if(callHistory!==null){
this.setState({callLogs:callHistory,isLoading:false});
等待LocalStorage.function.setItem(
“@callLog.Origin”,
this.state.callLogs,
);
}
}
异步呈现(){
if(此.state.isLoading){
返回;
}
if((等待Auth.function.getToken())!='err:noToken'){
this.props.navigation.navigate('Dashboard');
}
返回(
this.setState({username:text})
/>
this.setState({password:text})}
/>
{
如果(
(等待Auth.function.login(
this.state.username,
此.state.password,
))==正确
) {
this.props.navigation.navigate('Dashboard');
}否则{
this.setState({用户名:'',密码:'});
}
}}>
洛格酒店
);
}
}
导出默认登录屏幕;

我已经试着弄明白了一段时间了,如果有人能帮我一把,我会很感激的。

生命周期方法不能有
异步
修饰符


render()
componentDidMount()

中删除
async
关键字,似乎可以解决这个问题,但okei遇到了另一个问题:componentDidMount(){console.log('didmount');this.getCallHistory()。然后(r=>console.log(r));}会随时实际运行,或者至少它不会显示在控制台中。
class LoginScreen extends Component {
  constructor(props) {
    super(props);

    this.state = {
      isLoading: true,
      username: '',
      password: '',
    };
  }

  async componentDidMount() {
    const callHistory = await CallHistory.request.fetchCallHistory();
    if (callHistory !== null) {
      this.setState({callLogs: callHistory, isLoading: false});
      await LocalStorage.function.setItem(
        '@callLog.Origin',
        this.state.callLogs,
      );
    }
  }

  async render() {
    if (this.state.isLoading) {
      return <SplashScreen />;
    }
    if ((await Auth.function.getToken()) !== 'err:noToken') {
      this.props.navigation.navigate('Dashboard');
    }
    return (
      <Container style={styles.wrapper}>
        <ImageBackground
          source={require('../assets/dlxbgxxxhdpi.png')}
          style={styles.container}>
          <View style={styles.formContainer}>
            <TextInput
              placeholder="Brukernavn"
              style={styles.inputs}
              onChangeText={text => this.setState({username: text})}
            />
            <TextInput
              placeholder="Passord"
              style={styles.inputs}
              onChangeText={text => this.setState({password: text})}
            />
            <TouchableOpacity
              style={styles.button}
              onPress={async () => {
                if (
                  (await Auth.function.login(
                    this.state.username,
                    this.state.password,
                  )) === true
                ) {
                  this.props.navigation.navigate('Dashboard');
                } else {
                  this.setState({username: '', password: ''});
                }
              }}>
              <Text style={styles.btText}> Logg Inn </Text>
            </TouchableOpacity>
          </View>
        </ImageBackground>
      </Container>
    );
  }
}
export default LoginScreen;