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;