Javascript 不变冲突:登录页上的元素类型无效

Javascript 不变冲突:登录页上的元素类型无效,javascript,reactjs,react-native,Javascript,Reactjs,React Native,所以我是reactnative的新手,目前我正在用reactnative创建一个登录页面,我在我的应用程序中得到了这个 不变冲突:元素类型无效:应为字符串(对于内置组件)或类/函数(对于复合组件),但未定义。您可能忘记了从定义组件的文件中导出组件,或者您可能混淆了默认导入和命名导入。 检查“按钮”的渲染方法 这是App.js的 import React from 'react'; import { StyleSheet, Text, View } from 'react-native'; imp

所以我是reactnative的新手,目前我正在用reactnative创建一个登录页面,我在我的应用程序中得到了这个

不变冲突:元素类型无效:应为字符串(对于内置组件)或类/函数(对于复合组件),但未定义。您可能忘记了从定义组件的文件中导出组件,或者您可能混淆了默认导入和命名导入。 检查“按钮”的渲染方法

这是App.js的

import React from 'react';
import { StyleSheet, Text, View } from 'react-native';
import * as firebase from 'firebase';
import { Input } from './components/Input';
import { Button } from './components/Button';

export default class App extends React.Component {
  state = {
    email: '',
    password: ''
  }
  render() {
    return (
      <View style={styles.container}>
        <Input
          placeholder='Enter your mail...'
          label='Email'
          onChangeText={email => this.setState({email})}
          value={this.state.email}
        />
        <Input
          placeholder='Enter your password'
          label='Password'
          secureTextEntry
          onChangeText={password => this.setState({password})}
          value={this.state.password}
        />
        <Button onPress={() => console.log('pressed')}>Log In</Button>
      </View>
    );
  }
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    padding: 20
  },
});
从“React”导入React;
从“react native”导入{样式表、文本、视图};
从“firebase”导入*作为firebase;
从“./components/Input”导入{Input};
从“./components/Button”导入{Button};
导出默认类App扩展React.Component{
状态={
电子邮件:“”,
密码:“”
}
render(){
返回(
this.setState({email})}
值={this.state.email}
/>
this.setState({password})}
值={this.state.password}
/>
console.log('pressed')}>登录
);
}
}
const styles=StyleSheet.create({
容器:{
弹性:1,
填充:20
},
});
这是Button.js

从“React”导入React;
从“react native”导入{样式表,文本,TouchableOpacty};
常量按钮=({onPress,children})=>{
返回(
{儿童}
)
}
const styles=StyleSheet.create({
按钮:{
玛金托普:10,
填充:20,
宽度:“100%”,
背景颜色:“#00aeef”,
边界半径:4,
对齐项目:“居中”,
},
正文:{
颜色:'白色',
重量:'700',
尺码:18,
}
});
导出{按钮};
知道我的应用程序为什么会发生这种情况吗? 谢谢

更新:我遵循下面的解决方案,它提出了另一个解决方案


任何解决方案

在您的Button.js中,您应该写:

export default Button;
您的输入应该是:

import Button from './components/Button';
而不是:

export { Button };

在这种情况下,最好使用
导出默认按钮

代码的问题是在
按钮.js中导入
触摸不透明度
时。它应该是可触摸的不透明度

不,不是problem@FidriyantoRizkillah:您可以参考此小吃:无默认值导出和使用braces@FidriyantoRizkillah:不确定你的代码为什么工作是相当危险的,只是一条建议。玩得开心@伊萨克:当然可以,但从问题中的例子来看,“Button.js”文件应该只导出一个按钮,这就是为什么我在问题末尾说“在这个上下文中”。@Pintouch:但OP说他遇到了异常,而你建议的答案可以解决这个问题,对吗?或者你给出的答案是最佳实践?因为你是对的,
导出默认值
在这种情况下更好,但我怀疑是否解决了真正的问题我认为导入是问题所在,但这也纠正了我的代码谢谢先生
export { Button };