Javascript 错误:路由的组件';主页';必须是反应组件
我是一个新的本地人,当我使用堆栈导航和appContainer时会发生这种情况 我看到了类似的问题,但对我没有帮助 我创建index.js以简化导入 这是我的密码:Javascript 错误:路由的组件';主页';必须是反应组件,javascript,react-native,react-navigation,Javascript,React Native,React Navigation,我是一个新的本地人,当我使用堆栈导航和appContainer时会发生这种情况 我看到了类似的问题,但对我没有帮助 我创建index.js以简化导入 这是我的密码: export * from './Details'; export * from './Map'; export * from './MyHome'; export * from './Transition'; app.js import React,{Component} from 'react'; import { T
export * from './Details';
export * from './Map';
export * from './MyHome';
export * from './Transition';
app.js
import React,{Component} from 'react';
import {
TextInput,
StyleSheet,
ScrollView,
View,
Text,
StatusBar,
TouchableOpacity
} from 'react-native';
import { createStackNavigator } from 'react-navigation-stack';
import { createAppContainer } from 'react-navigation';
import Icon from 'react-native-vector-icons/Ionicons';
import {Details, Transition,Map,MyHome} from './src';
export default class App extends React.Component {
render() {
return <Transition />;
}
}
import React,{Component}来自'React';
进口{
文本输入,
样式表,
滚动视图,
看法
文本,
状态栏,
可触摸不透明度
}从“反应本机”;
从“反应导航堆栈”导入{createStackNavigator};
从“react navigation”导入{createAppContainer};
从“反应本机矢量图标/离子图标”导入图标;
从“/src”导入{Details,Transition,Map,MyHome};
导出默认类App扩展React.Component{
render(){
返回;
}
}
详细信息屏幕代码
import React,{Component} from 'react';
import {
Button,
Text,
View,
StyleSheet
} from 'react-native';
import MyHome from './MyHome';
import { createStackNavigator } from 'react-navigation-stack';
import { createAppContainer } from 'react-navigation';
class Details extends React.Component {
render() {
return (
<View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
<Text>Details Screen</Text>
<Button
title="Go to Details... again"
onPress={() => this.props.navigation.navigate('Home')}
/>
</View>
);
}
}
export {Details};
import React,{Component} from 'react';
import {
TextInput,
StyleSheet,
View,
Text,
} from 'react-native';
import { createStackNavigator } from 'react-navigation-stack';
import { createAppContainer } from 'react-navigation';
import MapView,{Marker} from 'react-native-maps';
class Map extends React.Component{
render(){
return(
<View style={styles.container}>
<MapView style={styles.map1} initialRegion={{latitude:24.758770,longitude:46.662038,latitudeDelta:0.09,longitudeDelta:0.0921}}>
<MapView.Marker
coordinate={{latitude:24.758770,longitude:46.662038}}
title="My location"
description="Yess"
/>
</MapView>
</View>
);
}
}
const styles= StyleSheet.create({
container:{
...StyleSheet.absoluteFillObject
},
map1:{
...StyleSheet.absoluteFillObject
}
});
export {Map};
import React,{Component} from 'react';
import {Animated,Easing ,Platform} from 'react-native';
import { createStackNavigator } from 'react-navigation-stack';
import { createAppContainer } from 'react-navigation';
import Details from './Details';
import MyHome from './MyHome';
import Map from './Map';
let SlideFromRight= (index, position) => {
const opacity= position.interpolate({
inputRange: [index -1,index,index+1],
outputRange:[0,1,1],
});
const scaleY= position.interpolate({
inputRange: [index -1,index,index+1],
outputRange:[0,1,1],
});
return {opacity,transform:[{scaleY} ] }
}
const TransitionConfiguration = () => {
return {
transitionSpec:{
duration: 750,
easing: Easing.out(Easing.poly(4)),
timing: Animated.timing,
useNativeDriver: true,
},
screenInterpolator: (sceneProps) => {
const {layout, position , scene} = sceneProps;
const width = layout.initWidth;
const height =layout.initHeight;
const {index, route}= scene;
const parms=route.parms || {};
const transition = parms.transition || 'default';
return {
default: SlideFromRight(index, position, width),
} [transition];
},
}
}
const RootStack = createStackNavigator(
{
Home: MyHome,
Details: Details,
Map: Map
},
{
initialRouteName: 'MyHome',
transitionConfig: TransitionConfiguration,
}
);
const AppContainer = createAppContainer(RootStack);
class Transition extends Component{
render(){
return <AppContainer/>;
}
}
export {Transition};
import React,{Component} from 'react';
import {
TextInput,
StyleSheet,
ScrollView,
View,
Text,
StatusBar,
TouchableOpacity
} from 'react-native';
import { createStackNavigator } from 'react-navigation-stack';
import { createAppContainer } from 'react-navigation';
import Icon from 'react-native-vector-icons/Ionicons';
import Details from './Details';
class MyHome extends React.Component{
moveToSlideFromRight= ()=> {
this.props.navigation.navigate('Details');
}
render(){
return(
<View style={styles.container}>
<StatusBar
backgroundColor="#77BD8B"
barStyle="light-content"/>
<Icon name="md-menu" size={40} color='white'/>
<Text style={styles.welcome}> Log In to My App</Text>
<TextInput style={styles.input}
placeholder="User name"
/>
<TextInput style={styles.input}
placeholder="Password"
secureTextEntry
/>
<View style={styles.Btncontainer}>
<TouchableOpacity style={styles.userBtn}>
<Text style={styles.BtnText}
onPress={() => {this.props.navigation.navigate('Map')}}
>Log In</Text>
</TouchableOpacity>
<TouchableOpacity onPress={this.moveToSlideFromRight} style={styles.userBtn}>
<Text style={styles.BtnText}>Sign up</Text>
</TouchableOpacity>
</View>
</View>
);
}
}
const styles = StyleSheet.create({
container:{
flex:1,
justifyContent:'center',
alignItems:'center',
backgroundColor:'#77BD8B'
},
welcome:{
fontSize:30,
textAlign:'center',
margin:10,
color:'white'
},
input:{
width:"90%",
backgroundColor:'white',
marginBottom:10,
borderRadius:10
},
Btncontainer:{
flexDirection:'row',
justifyContent:'center',
},
userBtn:{
backgroundColor:'#D4DADE',
borderRadius:15,
margin:10,
width:"15%"
},
BtnText:{
fontSize:16,
textAlign:'center',
}
});
export {MyHome};
import React,{Component}来自'React';
进口{
按钮
文本,
看法
样式表
}从“反应本机”;
从“/MyHome”导入MyHome;
从“反应导航堆栈”导入{createStackNavigator};
从“react navigation”导入{createAppContainer};
类详细信息扩展了React.Component{
render(){
返回(
详细信息屏幕
this.props.navigation.navigate('Home')}
/>
);
}
}
导出{详细信息};
地图屏幕代码
import React,{Component} from 'react';
import {
Button,
Text,
View,
StyleSheet
} from 'react-native';
import MyHome from './MyHome';
import { createStackNavigator } from 'react-navigation-stack';
import { createAppContainer } from 'react-navigation';
class Details extends React.Component {
render() {
return (
<View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
<Text>Details Screen</Text>
<Button
title="Go to Details... again"
onPress={() => this.props.navigation.navigate('Home')}
/>
</View>
);
}
}
export {Details};
import React,{Component} from 'react';
import {
TextInput,
StyleSheet,
View,
Text,
} from 'react-native';
import { createStackNavigator } from 'react-navigation-stack';
import { createAppContainer } from 'react-navigation';
import MapView,{Marker} from 'react-native-maps';
class Map extends React.Component{
render(){
return(
<View style={styles.container}>
<MapView style={styles.map1} initialRegion={{latitude:24.758770,longitude:46.662038,latitudeDelta:0.09,longitudeDelta:0.0921}}>
<MapView.Marker
coordinate={{latitude:24.758770,longitude:46.662038}}
title="My location"
description="Yess"
/>
</MapView>
</View>
);
}
}
const styles= StyleSheet.create({
container:{
...StyleSheet.absoluteFillObject
},
map1:{
...StyleSheet.absoluteFillObject
}
});
export {Map};
import React,{Component} from 'react';
import {Animated,Easing ,Platform} from 'react-native';
import { createStackNavigator } from 'react-navigation-stack';
import { createAppContainer } from 'react-navigation';
import Details from './Details';
import MyHome from './MyHome';
import Map from './Map';
let SlideFromRight= (index, position) => {
const opacity= position.interpolate({
inputRange: [index -1,index,index+1],
outputRange:[0,1,1],
});
const scaleY= position.interpolate({
inputRange: [index -1,index,index+1],
outputRange:[0,1,1],
});
return {opacity,transform:[{scaleY} ] }
}
const TransitionConfiguration = () => {
return {
transitionSpec:{
duration: 750,
easing: Easing.out(Easing.poly(4)),
timing: Animated.timing,
useNativeDriver: true,
},
screenInterpolator: (sceneProps) => {
const {layout, position , scene} = sceneProps;
const width = layout.initWidth;
const height =layout.initHeight;
const {index, route}= scene;
const parms=route.parms || {};
const transition = parms.transition || 'default';
return {
default: SlideFromRight(index, position, width),
} [transition];
},
}
}
const RootStack = createStackNavigator(
{
Home: MyHome,
Details: Details,
Map: Map
},
{
initialRouteName: 'MyHome',
transitionConfig: TransitionConfiguration,
}
);
const AppContainer = createAppContainer(RootStack);
class Transition extends Component{
render(){
return <AppContainer/>;
}
}
export {Transition};
import React,{Component} from 'react';
import {
TextInput,
StyleSheet,
ScrollView,
View,
Text,
StatusBar,
TouchableOpacity
} from 'react-native';
import { createStackNavigator } from 'react-navigation-stack';
import { createAppContainer } from 'react-navigation';
import Icon from 'react-native-vector-icons/Ionicons';
import Details from './Details';
class MyHome extends React.Component{
moveToSlideFromRight= ()=> {
this.props.navigation.navigate('Details');
}
render(){
return(
<View style={styles.container}>
<StatusBar
backgroundColor="#77BD8B"
barStyle="light-content"/>
<Icon name="md-menu" size={40} color='white'/>
<Text style={styles.welcome}> Log In to My App</Text>
<TextInput style={styles.input}
placeholder="User name"
/>
<TextInput style={styles.input}
placeholder="Password"
secureTextEntry
/>
<View style={styles.Btncontainer}>
<TouchableOpacity style={styles.userBtn}>
<Text style={styles.BtnText}
onPress={() => {this.props.navigation.navigate('Map')}}
>Log In</Text>
</TouchableOpacity>
<TouchableOpacity onPress={this.moveToSlideFromRight} style={styles.userBtn}>
<Text style={styles.BtnText}>Sign up</Text>
</TouchableOpacity>
</View>
</View>
);
}
}
const styles = StyleSheet.create({
container:{
flex:1,
justifyContent:'center',
alignItems:'center',
backgroundColor:'#77BD8B'
},
welcome:{
fontSize:30,
textAlign:'center',
margin:10,
color:'white'
},
input:{
width:"90%",
backgroundColor:'white',
marginBottom:10,
borderRadius:10
},
Btncontainer:{
flexDirection:'row',
justifyContent:'center',
},
userBtn:{
backgroundColor:'#D4DADE',
borderRadius:15,
margin:10,
width:"15%"
},
BtnText:{
fontSize:16,
textAlign:'center',
}
});
export {MyHome};
import React,{Component}来自'React';
进口{
文本输入,
样式表,
看法
文本,
}从“反应本机”;
从“反应导航堆栈”导入{createStackNavigator};
从“react navigation”导入{createAppContainer};
从“react native maps”导入MapView,{Marker};
类映射扩展了React.Component{
render(){
返回(
);
}
}
const styles=StyleSheet.create({
容器:{
…StyleSheet.absoluteFillObject
},
地图1:{
…StyleSheet.absoluteFillObject
}
});
导出{Map};
转换屏幕代码
import React,{Component} from 'react';
import {
Button,
Text,
View,
StyleSheet
} from 'react-native';
import MyHome from './MyHome';
import { createStackNavigator } from 'react-navigation-stack';
import { createAppContainer } from 'react-navigation';
class Details extends React.Component {
render() {
return (
<View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
<Text>Details Screen</Text>
<Button
title="Go to Details... again"
onPress={() => this.props.navigation.navigate('Home')}
/>
</View>
);
}
}
export {Details};
import React,{Component} from 'react';
import {
TextInput,
StyleSheet,
View,
Text,
} from 'react-native';
import { createStackNavigator } from 'react-navigation-stack';
import { createAppContainer } from 'react-navigation';
import MapView,{Marker} from 'react-native-maps';
class Map extends React.Component{
render(){
return(
<View style={styles.container}>
<MapView style={styles.map1} initialRegion={{latitude:24.758770,longitude:46.662038,latitudeDelta:0.09,longitudeDelta:0.0921}}>
<MapView.Marker
coordinate={{latitude:24.758770,longitude:46.662038}}
title="My location"
description="Yess"
/>
</MapView>
</View>
);
}
}
const styles= StyleSheet.create({
container:{
...StyleSheet.absoluteFillObject
},
map1:{
...StyleSheet.absoluteFillObject
}
});
export {Map};
import React,{Component} from 'react';
import {Animated,Easing ,Platform} from 'react-native';
import { createStackNavigator } from 'react-navigation-stack';
import { createAppContainer } from 'react-navigation';
import Details from './Details';
import MyHome from './MyHome';
import Map from './Map';
let SlideFromRight= (index, position) => {
const opacity= position.interpolate({
inputRange: [index -1,index,index+1],
outputRange:[0,1,1],
});
const scaleY= position.interpolate({
inputRange: [index -1,index,index+1],
outputRange:[0,1,1],
});
return {opacity,transform:[{scaleY} ] }
}
const TransitionConfiguration = () => {
return {
transitionSpec:{
duration: 750,
easing: Easing.out(Easing.poly(4)),
timing: Animated.timing,
useNativeDriver: true,
},
screenInterpolator: (sceneProps) => {
const {layout, position , scene} = sceneProps;
const width = layout.initWidth;
const height =layout.initHeight;
const {index, route}= scene;
const parms=route.parms || {};
const transition = parms.transition || 'default';
return {
default: SlideFromRight(index, position, width),
} [transition];
},
}
}
const RootStack = createStackNavigator(
{
Home: MyHome,
Details: Details,
Map: Map
},
{
initialRouteName: 'MyHome',
transitionConfig: TransitionConfiguration,
}
);
const AppContainer = createAppContainer(RootStack);
class Transition extends Component{
render(){
return <AppContainer/>;
}
}
export {Transition};
import React,{Component} from 'react';
import {
TextInput,
StyleSheet,
ScrollView,
View,
Text,
StatusBar,
TouchableOpacity
} from 'react-native';
import { createStackNavigator } from 'react-navigation-stack';
import { createAppContainer } from 'react-navigation';
import Icon from 'react-native-vector-icons/Ionicons';
import Details from './Details';
class MyHome extends React.Component{
moveToSlideFromRight= ()=> {
this.props.navigation.navigate('Details');
}
render(){
return(
<View style={styles.container}>
<StatusBar
backgroundColor="#77BD8B"
barStyle="light-content"/>
<Icon name="md-menu" size={40} color='white'/>
<Text style={styles.welcome}> Log In to My App</Text>
<TextInput style={styles.input}
placeholder="User name"
/>
<TextInput style={styles.input}
placeholder="Password"
secureTextEntry
/>
<View style={styles.Btncontainer}>
<TouchableOpacity style={styles.userBtn}>
<Text style={styles.BtnText}
onPress={() => {this.props.navigation.navigate('Map')}}
>Log In</Text>
</TouchableOpacity>
<TouchableOpacity onPress={this.moveToSlideFromRight} style={styles.userBtn}>
<Text style={styles.BtnText}>Sign up</Text>
</TouchableOpacity>
</View>
</View>
);
}
}
const styles = StyleSheet.create({
container:{
flex:1,
justifyContent:'center',
alignItems:'center',
backgroundColor:'#77BD8B'
},
welcome:{
fontSize:30,
textAlign:'center',
margin:10,
color:'white'
},
input:{
width:"90%",
backgroundColor:'white',
marginBottom:10,
borderRadius:10
},
Btncontainer:{
flexDirection:'row',
justifyContent:'center',
},
userBtn:{
backgroundColor:'#D4DADE',
borderRadius:15,
margin:10,
width:"15%"
},
BtnText:{
fontSize:16,
textAlign:'center',
}
});
export {MyHome};
import React,{Component}来自'React';
从“react native”导入{Animated,Easing,Platform};
从“反应导航堆栈”导入{createStackNavigator};
从“react navigation”导入{createAppContainer};
从“/Details”导入详细信息;
从“/MyHome”导入MyHome;
从“./Map”导入映射;
让SlideFromRight=(索引、位置)=>{
const opacity=position.interpolate({
输入范围:[索引-1,索引,索引+1],
输出范围:[0,1,1],
});
const scaleY=position.interpolate({
输入范围:[索引-1,索引,索引+1],
输出范围:[0,1,1],
});
返回{opacity,transform:[{scaleY}]}
}
常量转换配置=()=>{
返回{
过渡规格:{
持续时间:750,
放松:放松.out(放松.poly(4)),
计时:动画。计时,
useNativeDriver:没错,
},
屏幕插值器:(场景操作)=>{
常量{布局、位置、场景}=场景操作;
常量宽度=layout.initWidth;
const height=layout.initHeight;
const{index,route}=场景;
const parms=route.parms | |{};
const transition=parms.transition | |“default”;
返回{
默认值:SlideFromRight(索引、位置、宽度),
}[过渡];
},
}
}
const RootStack=createStackNavigator(
{
家:我家,
详情:详情,,
地图:地图
},
{
initialRouteName:“MyHome”,
转换配置:转换配置,
}
);
const-AppContainer=createAppContainer(RootStack);
类转换扩展了组件{
render(){
返回;
}
}
导出{转换};
我的主屏幕代码
import React,{Component} from 'react';
import {
Button,
Text,
View,
StyleSheet
} from 'react-native';
import MyHome from './MyHome';
import { createStackNavigator } from 'react-navigation-stack';
import { createAppContainer } from 'react-navigation';
class Details extends React.Component {
render() {
return (
<View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
<Text>Details Screen</Text>
<Button
title="Go to Details... again"
onPress={() => this.props.navigation.navigate('Home')}
/>
</View>
);
}
}
export {Details};
import React,{Component} from 'react';
import {
TextInput,
StyleSheet,
View,
Text,
} from 'react-native';
import { createStackNavigator } from 'react-navigation-stack';
import { createAppContainer } from 'react-navigation';
import MapView,{Marker} from 'react-native-maps';
class Map extends React.Component{
render(){
return(
<View style={styles.container}>
<MapView style={styles.map1} initialRegion={{latitude:24.758770,longitude:46.662038,latitudeDelta:0.09,longitudeDelta:0.0921}}>
<MapView.Marker
coordinate={{latitude:24.758770,longitude:46.662038}}
title="My location"
description="Yess"
/>
</MapView>
</View>
);
}
}
const styles= StyleSheet.create({
container:{
...StyleSheet.absoluteFillObject
},
map1:{
...StyleSheet.absoluteFillObject
}
});
export {Map};
import React,{Component} from 'react';
import {Animated,Easing ,Platform} from 'react-native';
import { createStackNavigator } from 'react-navigation-stack';
import { createAppContainer } from 'react-navigation';
import Details from './Details';
import MyHome from './MyHome';
import Map from './Map';
let SlideFromRight= (index, position) => {
const opacity= position.interpolate({
inputRange: [index -1,index,index+1],
outputRange:[0,1,1],
});
const scaleY= position.interpolate({
inputRange: [index -1,index,index+1],
outputRange:[0,1,1],
});
return {opacity,transform:[{scaleY} ] }
}
const TransitionConfiguration = () => {
return {
transitionSpec:{
duration: 750,
easing: Easing.out(Easing.poly(4)),
timing: Animated.timing,
useNativeDriver: true,
},
screenInterpolator: (sceneProps) => {
const {layout, position , scene} = sceneProps;
const width = layout.initWidth;
const height =layout.initHeight;
const {index, route}= scene;
const parms=route.parms || {};
const transition = parms.transition || 'default';
return {
default: SlideFromRight(index, position, width),
} [transition];
},
}
}
const RootStack = createStackNavigator(
{
Home: MyHome,
Details: Details,
Map: Map
},
{
initialRouteName: 'MyHome',
transitionConfig: TransitionConfiguration,
}
);
const AppContainer = createAppContainer(RootStack);
class Transition extends Component{
render(){
return <AppContainer/>;
}
}
export {Transition};
import React,{Component} from 'react';
import {
TextInput,
StyleSheet,
ScrollView,
View,
Text,
StatusBar,
TouchableOpacity
} from 'react-native';
import { createStackNavigator } from 'react-navigation-stack';
import { createAppContainer } from 'react-navigation';
import Icon from 'react-native-vector-icons/Ionicons';
import Details from './Details';
class MyHome extends React.Component{
moveToSlideFromRight= ()=> {
this.props.navigation.navigate('Details');
}
render(){
return(
<View style={styles.container}>
<StatusBar
backgroundColor="#77BD8B"
barStyle="light-content"/>
<Icon name="md-menu" size={40} color='white'/>
<Text style={styles.welcome}> Log In to My App</Text>
<TextInput style={styles.input}
placeholder="User name"
/>
<TextInput style={styles.input}
placeholder="Password"
secureTextEntry
/>
<View style={styles.Btncontainer}>
<TouchableOpacity style={styles.userBtn}>
<Text style={styles.BtnText}
onPress={() => {this.props.navigation.navigate('Map')}}
>Log In</Text>
</TouchableOpacity>
<TouchableOpacity onPress={this.moveToSlideFromRight} style={styles.userBtn}>
<Text style={styles.BtnText}>Sign up</Text>
</TouchableOpacity>
</View>
</View>
);
}
}
const styles = StyleSheet.create({
container:{
flex:1,
justifyContent:'center',
alignItems:'center',
backgroundColor:'#77BD8B'
},
welcome:{
fontSize:30,
textAlign:'center',
margin:10,
color:'white'
},
input:{
width:"90%",
backgroundColor:'white',
marginBottom:10,
borderRadius:10
},
Btncontainer:{
flexDirection:'row',
justifyContent:'center',
},
userBtn:{
backgroundColor:'#D4DADE',
borderRadius:15,
margin:10,
width:"15%"
},
BtnText:{
fontSize:16,
textAlign:'center',
}
});
export {MyHome};
import React,{Component}来自'React';
进口{
文本输入,
样式表,
滚动视图,
看法
文本,
状态栏,
可触摸不透明度
}从“反应本机”;
从“反应导航堆栈”导入{createStackNavigator};
从“react navigation”导入{createAppContainer};
从“反应本机矢量图标/离子图标”导入图标;
从“/Details”导入详细信息;
类MyHome扩展了React.Component{
moveToSlideFromRight=()=>{
this.props.navigation.navigate('Details');
}
render(){
返回(
登录到我的应用程序
{this.props.navigation.navigate('Map')}
>登录
注册
);
}
}
const styles=StyleSheet.create({
容器:{
弹性:1,
辩护内容:'中心',
对齐项目:'中心',
背景颜色:“#77BD8B”
},
欢迎:{
尺寸:30,
textAlign:“中心”,
差额:10,
颜色:'白色'
},
输入:{
宽度:“90%”,
背景颜色:'白色',
marginBottom:10,
边界半径:10
},
BTN容器:{
flexDirection:“行”,
辩护内容:'中心',
},
用户BTN:{
背景颜色:“#D4DADE”,
边界半径:15,
差额:10,
宽度:“15%”
},
BtnText:{
尺寸:16,
textAlign:“中心”,
}
});
出口{MyHome};
尝试改用导出默认值
export default MyHome;
不工作,屏幕显示红色错误[Inviant违例:元素类型无效],我不知道如何将图像放入注释中。如果使用默认导出,则必须更新所有使用位置,例如:不能使用“/MyHome”中的
export*from”代码>。如果可能的话,试着上传包含代码的expo零食OK it help me当我在过渡屏幕中删除{initialRouteName:'MyHome',}时,我不知道initialRouteName会产生什么影响